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.
Nous allons donc apprendre à nous servir de MySQLi. Ah ! Au passage, vous remarquerez que toute les fonctions de MySQLi commencent par… mysqli_ !
$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.
Une fois que la connexion est établie, nous pouvons passer à nos premières requêtes...
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.
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 :
Disons que $pseudo vaut quelquun, que $age vaut 23 et que $poid vaut 52,357 (par exemple, hein :lol: ).
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 :
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 :
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 )
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 !