2.2 Fonctions PHP - MySQL
A. Se connecter à un serveur de bases de données
-
Avant de pouvoir accéder à une base de données, il faut établir une connexion avec le serveur qui l'héberge. On spécifie:
-
le nom de la machine sur laquelle est installé le serveur (host)
-
un nom d'utilisateur (username) + le mot de passe correspondant (password)
mysql_pconnect(host, username, password);
$link = mysql_pconnect("localhost","clavel","secret");
-
On utilise 'localhost' pour signifier qu'on veut se connecter au serveur local (là où se trouve le serveur Web qui exécute la page). Si le serveur se trouve ailleurs, il faut donner l'adresse complète. $link contient la référence de la connection ouverte (ou "FALSE" si la connection ne s'est pas faite).
B. Sélectioner une base de données
-
Un serveur héberge plusieurs bases de données qui chacune contiennent des tables.
mysql_select_db(dbname, [linkID]);
mysql_select_db("demo");
-
Par défaut, la requête est envoyée sur le dernier lien ouvert. Si on a des connections vers plusieurs serveurs, il faut le spécifier.
C. Exécuter une requête SQL
-
PHP permet d'envoyer n'importe quelle requête SQL au serveur en utilisant la commande mysql_query.
-
Le nom d'utilisateur et le mot de passe spécifiés en se connectant à la base de données déterminent si la requête peut être exécutée.
-
La commande retourne un identificateur de résultat que l'on stocke dans une variable pour l'utiliser par la suite ($result).
mysql_query(requête_SQL);
$result = mysql_query("SELECT * FROM demo1");
La variable
$result
est "boolean" et contient à ce moment
-
1 (TRUE) si l'opération a été effectuée
-
0 (FALSE) si il y a eu un problème.
Ce qui est très utile pour le déboguage !
D. Traitement des résultats
-
Après avoir soumis une requête à mySQL, la fonction mysql_query nous donne un identificateur de résultats ($result) qu'il faut décortiquer et afficher.
-
Il existe de multiples façons d'accéder au résultat d'une requête. En voici deux:
Traitement indépendant du nom des champs
mysql_fetch_row
mysql_fetch_row(identificateur)
Exemple:
$result = mysql_query("SELECT * FROM demo1")
$row = mysql_fetch_row
($result);
Nombre de champs dans un enregistrement
mysql_num_fields
mysql_num_fields(identificateur)
$nb_champs = mysql_num_fields($result);
-
donne le nombre de champs dans un enregistrement.
E. Gérer les erreurs (Warnings)
-
Après avoir fait une opération MySQL, PHP peut nous rétourner des "warnings" pour nous prévenir d'une erreur.
-
Il existe deux fonctions PHP pour accéder aux erreurs:
mysql_errno()
mysql_errno(identificateur)
-
rétourne la valeur numérique d'erreur de la dernière opération mySQL ou zéro (0) s'il n'y pas des erreurs.
mysql_error()
mysql_error(identificateur)
-
rétourne la description d'erreur de la dernière opération mySQL ou un "string" vide "" dans le cas ou il n'y a pas des erreurs.
Exemple 2-1: Exemple gestion d'erreurs:
<?php
mysql_pconnect("nohost", "basuser", "wrongpass");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>
Exemple 2-2: Traitement indépendant du nom des champs.
Génération d'une table HTML avec les enregistrements contenus dans un résultat
<?
mysql_pconnect("localhost","nobody","");
mysql_select_db("demo");
$result = mysql_query("SELECT * FROM demo1");
?>
<table border="1"> <tr>
<?
while ($row = mysql_fetch_row($result)) {
echo "<tr>";
for ($i=0; $i<mysql_num_fields($result); $i++) {
echo "<td>";
// test if this is the URL
if ($i == 4) { echo "<a href='$row[$i]'>$row[$i]</a>"; }
else { echo "$row[$i]"; }
echo "</td>";
} }
?>
</table>
F. Traitement en utilisant le nom des champs
mysql_num_rows
mysql_num_rows(identificateur);
Exemple:
$nb_enregistrements = mysql_num_rows($result);
-
Donne le nombre d'enregistrements contenus dans le résultat identifié par $result
mysql_result
mysql_result(identificateur, index, champ);
Exemple:
$nom = mysql_result($result,0,'fullname');
-
index
désigne le numéro de l'enregistrement. L'indexation commence à 0 ! (zéro). A l'index 0 correspond le premier enregistrement.
-
champ
désigne le nom du champ que l'on veut récupérer.
-
(voir slide suivant)
Exemple 2-3: Traitement utilisant le nom des champs.
Génération d'une table HTML avec les enregistrements contenus dans un résultat
<?php
mysql_pconnect( "localhost", "nobody", "") or die( "Unable to connect to SQL server");
mysql_select_db("demo") or die ( "Unable to select database");
$result = mysql_query( "select * from demo1");
?>
<table border="1">
<?php
$i = 0;
while ($i < mysql_num_rows($result)) {
echo "<tr>";
echo "<td>";
echo mysql_result($result,$i,'id');
echo "</td>";
echo "<td>";
echo mysql_result($result,$i,'fullname');
echo "</td>";
echo "<td>";
echo mysql_result($result,$i,'love');
echo "</td>";
echo "<td>";
echo mysql_result($result,$i,'sports');
echo "</td>";
echo "</tr>";
$i++;
}
echo "</table>";
?>