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
-
le mot de passe correspondant
mysql_pconnect
mysql_pconnect(host, username, password);
mysql_pconnect("tecfasun1.unige.ch","nobody","");
-
`nobody' est un utilisateur qui peut se connecter sans mot de passe mais qui a des permissions limitées.
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
mysql_select_db(dbname);
mysql_select_db("demo");
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
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.
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)
$row = mysql_fetch_row($result);
-
prend un enregistrement dans le résultats. Cet enregistrement est un vecteur de valeurs qui correspond aux champs de la base de données.
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 à 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 avec les deux fonctions:
<?php
mysql_connect("marliesle");
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-1: Traitement indépendant du nom des champs.
Génération d'une table HTML avec les enregistrements contenus dans un résultat
<?
mysql_pconnect("tecfasun1.unige.ch","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>
Traitement en utilisant le nom des champs
mysql_num_rows
mysql_num_rows(identificateur);
$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);
$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.
Exemple 2-2: Traitement utilisant le nom des champs.
Génération d'une table HTML avec les enregistrements contenus dans un résultat
<?
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">
<?
$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>";
?>