Maîtrisez MySQLi sans POO !

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Dans ce tutoriel, qui est mon premier, nous allons apprendre à utiliser une extension de PHP, qui est MySQLi.

D'accord, mais c'est quoi, MySQLi ?

MySQLi permet de communiquer avec une base de données MySQL.

Mais pourquoi utiliser MySQLi ?

Je dirais que c'est juste une histoire de goûts.
On peut utiliser MySQLi sans passer par la programmation orientée objet, ce qui peut être un avantage pour ceux qui ne connaissent rien à la POO en PHP (comme moi ;) ).
Peut-être que par la suite, certains trouveront que MySQLi est plus simple à utiliser que la technique enseignée par M@teo21 dans son tutoriel PHP.

Pour suivre ce tutoriel, vous devez avoir lu le tutoriel PHP officiel du site, même la partie avec MySQL.

Nous allons donc apprendre à nous servir de MySQLi.
Ah ! Au passage, vous remarquerez que toute les fonctions de MySQLi commencent par… mysqli_ !

Se connecter à la base de données

Pour se connecter à MySQL, on va utiliser cette fonction :

<?php $bdd = mysqli_connect('serveur', 'utilisateur', 'mot_de_passe', 'base'); ?>
  • $bdd correspond à une variable où seront stockées les informations de la base de données. On s'en servira souvent.

  • serveur correspond au serveur SQL.

  • utilisateur correspond au nom d'utilisateur pour se connecter au serveur SQL.

  • mot_de_passe correspond au mot de passe pour le serveur SQL !

  • base correspond à votre base de données du serveur SQL.

On peut tester si la connexion a réussi ou non :

<?php if($bdd = mysqli_connect('localhost', 'root', '', 'base')) { // Si la connexion a réussi, rien ne se passe. } else // Mais si elle rate… { echo 'Erreur'; // On affiche un message d'erreur. } ?>

Dans cet exemple, MySQLi se connecte au serveur local.

Je vous conseille de mettre ce code dans un fichier connexion_sql.php, que vous insérerez ensuite dans chaque fichier qui travaille avec SQL.
D'ailleurs, j'espère que vous faisiez déjà comme ça !

Une fois que la connexion est établie, nous pouvons passer à nos premières requêtes...

Les requêtes simples

Nous allons apprendre à gérer les requêtes simples.

Qu'appelles-tu requêtes simples ?

Ce sont les requêtes qui ne sont pas préparées, car ces dernières sont un peu plus complexes.

Le code de la requête

Le code de la requête est le suivant :

<?php $resultat = mysqli_query($bdd, 'requete'); ?>
  • $resultat est la variable où seront stockées les données.

  • $bdd est la variable retournée par la fonction de connexion à la base de données, voir plus haut.

  • 'requete' est une requête SQL.

Exemple :

<?php $resultat = mysqli_query($bdd, 'SELECT * FROM membres LIMIT 0, 10'); ?>

Voilà, requete était une simple requête SQL !

Mais maintenant, comment afficher ces résultats ?

C'est ce que nous allons voir…

Afficher le résultat d'une requête simple

Pour afficher le résultat de ce type de requêtes, il suffit de fetcher dans une boucle while.

<?php while($donnees = mysqli_fetch_assoc($resultat)) { echo $donnees['id']; echo "\n"; echo $donnees['pseudo']; } ?>

Que se passe-t-il ? En réalité, c'est relativement simple : $donnees est transformé en un tableau avec les noms des colonnes demandées dans la requête. Cette transformation est réalisée grâce à la fonction mysqli_fetch_assoc($resultat), $resultat étant le résultat brut de la requête. Cette fonction sert aussi et surtout à passer au résultat suivant, d'où l'utilisation de la boucle while.

Oups ! J'ai oublié quelque chose ! :-°

<?php while($donnees = mysqli_fetch_assoc($resultat)) { echo $donnees['id']; echo "\n"; echo $donnees['pseudo']; } mysqli_free_result($resultat); ?>

C'est mieux comme ça !
Eh oui, il ne faut pas oublier de fermer le curseur avec la fonction suivante :

<?php mysqli_free_result($resultat); ?>

Fermer le curseur permet de libérer les données récupérées lors d'une requête SQL.

Résumé<?php // include du fichier de connexion à SQL. $resultat = mysqli_query($bdd, 'SELECT * FROM membres LIMIT 0, 10'); while($donnees = mysqli_fetch_assoc($resultat)) { echo $donnees['id']; echo "\n"; echo $donnees['pseudo']; } mysqli_free_result($resultat); ?> Les requêtes préparées

Pour travailler avec les requêtes préparées, il y a un certain ordre à suivre :

  1. préparer la requête ;

  2. lier les variables à la requête ;

  3. exécuter la requête ;

  4. si la requête renvoie un résultat, on continue : lier le résultat à des variables ;

  5. fetcher le résultat.

Quasiment toutes les fonctions concernant les requêtes préparées commenceront par mysqli_stmt_.

Préparer la requête

On prépare la requête avec cette fonction :

<?php $req_pre = mysqli_prepare($bdd, 'SELECT * FROM membres WHERE id = ?'); ?>

$req_pre est une variable qui contient la requête préparée. À part ça, vous n'avez pas vraiment besoin d'explications.

Lier les variables à la requête préparée

On les lie avec cette fonction un peu plus complexe :

<?php mysqli_stmt_bind_param($req_pre, "i", $id); ?>

Cette fonction est en effet un peu particulière.
$req_pre est la variable de la requête préparée. i est le type de la variable qui suit. La variable coorespond à ce qui va remplacer le point d'interrogation dans la requête.
Concernant les types de variables possibles, voici un petit tableau :

Lettre

Correspond à

i

un nombre entier

d

un nombre décimal

s

une chaîne de caractères

Ces lettres doivent être placées selon l’ordre dans lequel apparaissent les variables après, tel que les variables doivent apparaître dans l'ordre des points d'interrogation dans la requête. Les lettres doivent être dans le même paramètre.
Un exemple vaut mieux qu'un long discours :

<?php $req_pre = mysqli_prepare($bdd, 'INSERT INTO membres (pseudo, age, poids) VALUES ( ?, ?, ?)'); mysqli_stmt_bind_param($req_pre, "sid", $pseudo, $age, $poids); ?>

Disons que $pseudo vaut quelquun, que $age vaut 23 et que $poid vaut 52,357 (par exemple, hein ).

Exécuter la requête

Rien de bien sorcier :

<?php mysqli_stmt_execute($req_pre); ?>

(Sans commentaires.)

Si la requête ne renvoie pas de résultat (les requêtes d'insertion, de mise à jour, de suppression), on s'arrête là. Sinon, il faut lier le résultat de l'exécution à des variables.

Lier le résultat à des variables

Personnellement, je lie le résultat d'une requête préparée à un tableau dont chacun aura le nom de la colonne du résultat. Vous allez vite comprendre :

<?php mysqli_stmt_bind_result($req_pre, $donnees['pseudo'], $donnees['age'], $donnees['email']); ?>

Voilà, si vous choisissez de tout sélectionner dans la requête, vous aurez une variable par colonne de la base. Si vous avez sélectionné les colonnes que vous souhaitez obtenir dans la requête, il faudra une variable par colonne demandée.

Fetcher le résultat

Si vous savez qu'il n'y aura qu'un résultat, il faut fetcher de cette façon :

<?php mysqli_stmt_fetch($req_pre); ?>

Et seulement ensuite vous pourrez utiliser le tableau $donnees.

S'il y aura plusieurs résultats, il faut faire une boucle :

<?php while(mysqli_stmt_fetch($req_pre)) { echo $donnees['pseudo'] . ", " . $donnees['age'] . " ans," . $donnees['email']; } ?> ExemplesAvec une requête qui ne renvoie pas de résultat<?php // include de la connexion SQL. $req_pre = mysqli_prepare($bdd, 'INSERT INTO membres (pseudo, age, email) VALUES (?, ?, ?)'); mysqli_stmt_bind_param($req_pre, "sis", $pseudo, $age, $email); mysqli_stmt_execute($req_pre); ?> Avec une requête qui renvoie des résultats<?php // include de la connexion SQL. $req_pre = mysqli_prepare($bdd, 'SELECT * FROM membres WHERE age = ? LIMIT 0, ?'); mysqli_stmt_bind_param($req_pre, "ii", $age, $nombre_resultat); mysqli_stmt_execute($req_pre); mysqli_stmt_bind_result($req_pre, $donnees['pseudo'], $donnees['age'], $donnees['email']); while(mysqli_stmt_fetch($req_pre)) { echo $donnees['pseudo'] . ", " . $donnees['age'] . " ans, " . $donnees['email']; } ?>

Dans l'exemple ci-dessus, pseudo, age et email sont les seules colonnes de ma table.
Si j'avais demandé dans la requête SQL seulement pseudo et email j'aurais lié le résultat seulement à $donnees['pseudo'] et $donnees['email'], dans l'ordre que je les ai indiqués dans la requête.

Quelques fonctions supplémentaires...

Même si vous les trouverez toutes dans la doc' de MySQLi, je vais vous montrer quelques fonctions, que je pense vous aurez besoin de temps en temps.

Connaître le nombre d'entrées retournées

Connaître le nombre d'entrées dans une table peut parfois être utile: donner le nombre de commentaires dans un blog, le nombres de réponse dans un forum... Nous allons voir ça en détail avec des requêtes simples et préparées.

Avec une requête simple

Vous devez utiliser la fonction suivante:

<?php mysqli_num_rows($requete); ?>

La fonction vous retournera le nombre d'entrées dans la table qu'elle a obtenu selon la requête SQL.

Exemple:

<?php // include de la connexion à la BDD. $req = mysqli_query($bdd, 'SELECT * FROM commentaires'); $nb = mysqli_num_rows($req); echo 'Il y a ' . $nb . ' commentaire(s).'; ?> Avec des requêtes préparées

Là, c'est un peu plus compliqué. En réalité, vous devez d'abord stocker (je n'sais trop où...) le résultat de la requête préparée et seulement ensuite demander le nombre d'entrées retournées par la requête.
Après avoir exécuté la requête préparée, utilisez cette fonction qui stocke les informations:

<?php mysqli_stmt_store_result($stmt); ?>

Ensuite, vous pouvez gentiment demander combien d'entrées ont été retournées par la requête:

<?php $nb = mysqli_stmt_num_rows($stmt);

Un petit exemple qui retourne les commentaires d'un article (tiré de mon site) et ensuite le nombre de commentaires:

<?php // include de la connexion à la BDD. $stmt = mysqli_prepare($bdd, 'SELECT contenu, auteur, date_post FROM commentaires WHERE id_article = ? AND ok = 1 ORDER BY date_post'); mysqli_stmt_bind_param($stmt, "i", $_GET['id']); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); $nb = mysqli_stmt_num_rows($stmt); ?>

(Vous vous doutez bien qu'ensuite j'affiche ce nombre, et les commentaires à la suite ! :p )

Si vous rencontrez un jour un problème que vous n'arrivez pas à résoudre, ajoutez le fichier de la connexion à MySQL juste avant la requête. C'est parfois une solution.
Pensez-y. ;)

Non, non, ne vous inquiétez pas, je vais vous la donner, l'adresse de la DOC ! Attention, la voici, la voilà :
http://www.php.net/manual/fr/mysqli.summary.php

Voilà, le tutoriel touche à sa fin. N'hésitez pas à laisser des commentaires ! :)
Si vous avez un souci, si vous souhaitez proposer une amélioration ou autre, n'hésitez pas à me contacter par MP !

  • #
Waouh !

Très heureux de voir que nos cours vous plaisent,...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Maîtrisez MySQLi sans POO !

Prix sur demande