Ce chapitre dressera un portrait simple et illustré d'exemples des principales fonctions MySQL dont PHP se sert pour interroger les bases.
Rappels et compl�ments d'information :
les éléments entre crochets ('[' & ']') sont facultatifs, les parenthèses '(' & ')' sont à saisir, et enfin les valeurs entre accolades ('{' & '}') séparées par des slashes ('/') sont des choix entre différentes valeurs (une seule à la fois !).
en PHP, les index, c'est à dire les 'niveaux' des variables multidimensionnelles, commencent à zéro. Un ensemble de 10 valeurs occupera donc la plage d'index de 0 à 9...
le caractère arobase ('@') sert à évincer les éventuels messages d'erreur d'exécution de la fonction MySQL.
Fonctions élémentaires
Se connecter à son serveur de BdD MySQL et choisir sa base de travail.
Fonctions d'exécution...
Exécuter une requête SQL.
Il existe plusieurs fonctions pour exécuter une requête, mais je ne vais parler que de la plus répandue et la plus simple.
... et de test.
.. analyser son résultat : est-ce que ma requête de sélection m'a donné un résultat ? Y'a-t'il eu une erreur ??...
Extraire un résultat
Je vous donne cette fonction pour information, évitez de l'utiliser, elle consomme énormément de mémoire !
mysql_fetch_*
Ou les fonctions pour interprêter le résultat d'une requete SELECT passée dans $oSqliDb->query().
Exemple général commenté
Nous supposons qu'il existe à la racine « www » d'EasyPHP un fichier connect.inc.php qui contient les lignes necessaires à la connection à notre base de données de test.
Un utilisateur spécifique à été créé, mais rien ne vous empêche de recourir aux valeurs "root" et "" pour les nom d'utilisateur et mot de passe...
<?php // Connection à la BdD
$connection = mysql_connect( "localhost", "testeur", "test" ) ordie( "Connection impossible. MySQL renvoi le message d'erreur suivant : " . mysql_error() ); // Sélection de la BdD mysql_select_db( "tests", $connection ) ordie( "Selection de la base impossible. MySQL renvoi le message d'erreur suivant : " . mysql_error() ); ?>
Pour les besoins du script ci-dessous, il nous faut une petite table contenant des personnes, c'est-à-dire des noms et prénoms...
Voici un petit schéma MySQL avec quelques tuples.
# structure de la table `personnes`
CREATE TABLE`personnes` ( `personne_id`int( 11 ) unsigned NOT NULL auto_increment, `prenom`varchar( 50 ) NOT NULL default'', `nom`varchar( 75 ) NOT NULL default'', PRIMARY KEY ( `personne_id` )
) TYPE=MyISAM;
// requête simple de sélection
$requete = "SELECT nom, prenom FROM personnes ORDER BY nom"; /*
- première remarque, le point-virgule à la fin des requêtes SQL n'est plus nécessaire ici !
- la casse MAJUSCULES / minuscules n'a pas d'importance pour les mots réservés du SQL.
*/
// exécution de la requête
$curseur = mysql_query( $requete ); // ou alors
$curseur = mysql_query( "SELECT nom, prenom FROM personnes ORDER BY nom" ); // ou encore
$curseur = mysql_query( $requete, $connection ); /*
la variable '$connection' contenant la chaîne de connection à la base, initialisée dans le fichier 'connect.inc.php'
Pour comprendre le principe des index et autres dimensions, voyons à quoi ressemble le contenu et la structure du fameux curseur :
La variable $curseur est donc assimilable à un tableau. Mais attention, c'est une "image", en fait $curseur est un identifiant de ressource qui pointe vers une sorte de tableau !.
Sa première dimension, c'est la colonne de chiffres à gauche, les 'index de lignes'.
Ses autres dimensions sont les deux autres colonnes, 'nom' et 'prenom', dont les 'index de colonne' sont zéro et un. J'espère que cet exemple est clair.
*/ ?> <br /> <?php // taille du résultat
$taille = mysql_num_rows( $curseur ); echo"le nombre de lignes retournées par la requête \"<i>" . $requete . "</i>\" est <b>" . $taille . "</b>.<br />\n"; /*
le nombre de lignes retournées par la requête "<i>SELECT nom, prenom FROM personnes ORDER BY nom</i>" est <b>4</b>.<br />
Voici donc le résultat du premier 'echo', du point de vue du code source. Voyons maintenant comment afficher les résultats du curseur lui-même.
*/ ?> <br /> <?php for( $x = 0; $x < mysql_num_rows( $curseur ) - 1; $x++ )
{ echo"$x - " . mysql_result( $curseur, $x, "prenom" ) . " " . mysql_result( $curseur, $x, "nom" ) . "<br />\n";
} /*
En nous servant de la taille du curseur, on peut le parcourir à l'aide d'une instruction 'FOR'. On commence à zéro, et tant que l'index reste inférieur à la taille du curseur, on le parcours. Le résultat donne ceci (code source HTML) :
*/ ?> <br /> <?php /*
Il est aussi possible de se servir d'une autre commande, qui s'affranchie de la taille du curseur, mysql_fetch_array.
La commande 'fetch' charge, dans ce cas un tableau d'une ligne et n colonnes (autant que de champs dans le SELECT).
Chaque utilisation de mysql_fetch_* garde en mémoire le dernier index du curseur qui a été chargé, combiné avec un 'TANT QUE ... FAIRE ...' qui teste avant de faire, et voici que l'affichage est quasi-automatique, sans avoir à se soucier des dimensions, mis à part les colonnes...
*/
$curseur = mysql_query( $requete ); while( $un_element = mysql_fetch_array( $curseur ) )
{ echo"- " . $un_element["nom"] . ", " . $un_element["prenom"] . "<br />\n";
} /*
le résultat donne ceci dans le code source HTML :
- Cuz, Céline<br />
- Cuz, Cédric<br />
- Revillard, Anthony<br />
- Vindret, Joël<br />
*/ ?> </body> </html>
Pour installer facilement et rapidement PHP, Apache et MySQL sous Windows. >> plus d'infos.
+ de liens
Vous voulez d'autres tutoriaux, d'autres scripts PHP ? Pas de problème, pour avoir tout ça, cliquez >> ici, et consultez aussi >> l'annuaire de liens.
Le PHP en chiffres
6 des dix plus importants sites français utilisent le PHP, contre 2 l'ASP et 2 une technologie non dévoilée.
1'200 fonctions, pour dessiner des images aux formats GIF ou PNG à la volée, tranformer ou créer des fichiers au format PDF, interroger des bases de données avec ou sans ODBC, sans parler de toutes les fonctions HTTP, la manipulation de tableaux, les fichiers, les fonctions mathématiques...
100'000 sites en PHP en janvier 1999, contre
6 millions à ce jour, le PHP ayant été lançé en version 1.0 en janvier 1994.
(source : SVM n°201 février 2002, citant Jupiter MMXI, Security-space et Netcraft)