
|
|
<? require("param.php"); $bd="test"; /* suppression de la base sur le serveur */ mysql_drop_db($bd, $connexion) or die("Suppression impossible de la base $bd" par $login) ; echo "suppression réussie de la base $bd, essai de re-création"; /* création de la base sur ce serveur */ mysql_create_db($bd, $connexion) or die("Création impossible de la base $bd par $login") ; echo "création réussie de la base $bd"; ?> /* Connexion à la base $bd * Si le paramètre $connexion est omis, * il s'agit de la dernière connexion réussie au serveur */ mysql_select_db($bd, $connexion) or die("Connexion impossible à la base $bd par $login"); echo "connexion réussie à la base $bd pour l'utilisateur $login "; |
La fonction PHP mysql_query($requete) est la fonction généraliste qui envoie la chaine $requete écrite en langage SQL, au moteur MySql afin que ce dernier l'exécute.
Implicitement, la requête s'adresse à la base précédemment sélectionnée par mysql_select_db
Sinon, on utilise mysql_db_query($bd, $requete) pour adresser la requête directement à la base
Selon le type de requete, cette fonction renvoie une valeur
* interprétable en booléen vrai-faux (pour DELETE, INSERT, UPDATE ..)
* identificateur de résultat, à partir duquel il faudra obtenir les données. C'est le cas pour la commande SELECT) pour laquelle il faudra utiliser les fonctions d'extraction spécifiques mysql_fetch_xxx() pour récupérer les lignes du résultat de la requête
Exemples :
|
/* les connexions au serveur et à la base sont déjà établies * afficher le contenu de la table personnes */ $bd="test"; $table = "personnes"; $requete = "SELECT * FROM $table ORDER BY nom"; $resultat = mysql_query($requete); /* Connaitre la liste des tables */ $resultat = mysql_list_tables ( $bd ); // donne le nombre de lignes dans le resultat $nb = mysql_num_rows($resultat); echo "Liste des tables de $bd :"; for ($i =0 ; $i < $nb ; $i++) // donne le nom de la table numéro i dans la liste précédente echo mysql_tablename($resultat , $i) . "; |
Soit à créer une table nommée personnes, dont les champs sont id (un numéro identifiant la personne, donc à déclarer comme clé primaire), nom (à indexer car il sera l'objet d'interrogations), prenom, sexe, date et emploi.
En SQL chacune de ces variables de champ doit être déclarée avec son type et d'éventuelles options
Voici la requête SQL de création de la tables personnes, et son exécution par un script PHP :
|
$bd="test"; $table = "personnes"; $requete= "CREATE TABLE $table ( id INT NOT NULL AUTO_INCREMENT, nom VARCHAR(25), prenom VARCHAR(25), date_naissance DATE sexe CHAR(1), emploi VARCHAR(25), PRIMARY KEY (id), INDEX i_nom (nom) )"; $resultat = mysql_db_query($bd, $requete); /* la requete a t-elle réussi ? On teste le "booléen" renvoyé */ if ($resultat) echo "La table $table a bien été créée !"; /* Supprimer la table*/ $requete = "DROP TABLE $table" ; $resultat = mysql_query($requete) or die("Impossible de supprimer $table") ; |
Ces 3 commandes SQL : INSERT, DROP et UPDATE agissent sur les lignes d'une table existantes
|
$table = "personnes"; $requete = "INSERT INTO $table (id, nom, prenom, sexe , emploi) VALUES (32,'Toto','Jules','m', 'formateur')"; $resultat = mysql_query($requete); // Le prénom ne Toto n'est pas Jules mais Arthur requete = "UPDATE $table SET prenom = 'Arthur' WHERE nom = 'Toto'"; $resultat = mysql_query($requete); // Finalement on supprime cet enregistrement requete = "DELETE FROM $table WHERE nom = 'Toto' AND prenom ='Arthur' "; $resultat = mysql_query($requete); |
Une telle requête s'écrit en SQL avec la commande SELECT. Son exécution produit une variable qui est un identificateur du résultat, par lequel nous pourrons obtenir explicitement les données.
|
$requete = "SELECT * FROM $table "; $requete .= " WHERE id <=10 $requete .= " ORDER BY nom"; $resultat = mysql_query($requete); // si besoin, pour connaitre le nombre $nb de lignes du résultat $nb = mysql_num_rows($resultat); |
3 fonctions peuvent être utilisées pour récupérer les informations
référencées par $resultat, après appel de mysql_query() sur une requête de type SELECT : mysql_fetch_array(), mysql_fetch_row(), mysql_fetch_object().
|
1. $ligne = mysql_fetch_row($resultat); Cette fonction retourne un tableau indicé nommé ici $ligne, indicé à partir de 0, dont les éléments contiennent les valeurs des champs de la ligne courante pointée par $resultat, ou bien FALSE s'il ne reste plus de ligne. Les appels consécutifs à mysql_fetch_row() déplace un pointeur vers la ligne suivante, si elle existe. Insérées dans une boucle while, ces appels permettent de décrire en séquence toutes les lignes du résultat. 2. $ligne = mysql_fetch_array($resultat); Cette fonction est une version étendue de mysql_fetch_row(). Ici $ligne désigne un tableau associatif dont les indices peuvent être remplacés par les noms des champs, ce qui permet de s'adresser directement à la valeur d'une colonne du résultat. Ainsi la valeur du champ nom du tableau $ligne s'obtient avec $ligne[nom] 3. $ligne= mysql_fetch_object($resultat); On obtient un objet construit à partir d'une ligne du resultat, ou FALSE si on a atteint la fin de la table Cet objet $ligne possède pour attributs tous les champs de la table, initialisés aux valeurs actuelles de cette ligne. Ainsi la valeur du champ nom de l'objet $ligne s'obtient avec la syntaxe $ligne->nom |
Si nécessaire, on peut re-parcourir le résultat identifié par $resultat, en remettant le pointeur au début par la commande mysql_data_seek($resultat, 0);
|
<? /* inclure les paramètres de connexion */ require("param.inc"); /* connexion au serveur MySql */ $connexion = mysql_connect($serveur, $login, $mdp) or die("Connexion impossible au serveur $serveur"); echo "connexion réussie de $user au serveur $serveur "; /* connexion à la base */ mysql_select_db($bd) or die("Connexion impossible à la base $bd"); echo "connexion réussie à la base $bd pour l'utilisateur $login "; |
Voici la liste des fonctions intégrés à PHP et spécialisées dans l'accès aux bases MySql.
Chacune fait l'objet d'une description dans la documentation disponible sur le site PHP à http://www.php.net/docs.php. La traduction française se trouve à http://www.php.net/manual/fr/
| $connexion=mysql_connect($serveur, $login,$mdp) | L'utilisateur $login ouvre une connexion au serveur $serveur, et reçoit en retour l'identifiant $connexion |
| mysql_close($connexion) | Ferme la connexion MySQL identifiée par $connexion |
| mysql_select_db($bd,$connexion) | Sélectionne la base de données nommée $bd |
| $resultat = mysql_query($requete[,$connexion]) | La requête SQL $requete, écrite sous forme de chaine, est envoyée à la base déjà sélectionnée, et reçoit
un identifiant de résultat Celui-ci est un pseudo-booléen TRUE si la requete a été correctement exécutée (meme si aucune ligne n'a été modifiée ou sélectionnée). En cas de requete SELECT, $resultat permet d'accéder aux données extraites. |
| mysql_db_query($bd, $requete[,$connexion]) | Idem, mais la base est d'abord sélectionnée |
| $nbchamps=mysql_num_fields($resultat) | Retourne dans $nbchamps le nombre de champs du résultat |
| $nblignes = mysql_num_rows($resultat) | Retourne dans $nblignes le nombre de lignes du résultat |
| $nb=mysql_affected_rows($connexion) | Retourne le nombre de lignes affectées lors de la dernière requête de type INSERT, UPDATE,DELETE,CREATE ou DROP |
| $nomchamp = mysql_field_name($resultat, $i) | Retourne le nom du champ numéro $i du résultat ($i de 0 à $nbchamp |
| $ligne = mysql_fetch_row($resultat) | Retourne la ligne suivante du résultat dans un tableau indicé, dont les éléments contiennent les valeurs de cette ligne |
| $ligne = mysql_fetch_array($resultat) | Retourne la ligne suivante du résultat dans un tableau associatif. |
| $ligne = mysql_fetch_object($resultat) | Retourne la ligne suivante du résultat, dans un objet dont les attributs sont exactement les champs obtenus |
| $liste_bases = mysql_list_dbs() | Retourne la liste des bases de données disponibles sur le serveur |
| $liste_tables = mysql_list_tables($bd) | Retourne la liste des tables de la base $bd |
| $nom = mysql_db_name($resultat,$i) | Retourne le nom de la $i ème base de donnée |
| $tab[$i] = mysql_tablename($liste_tables, $i) | Lit le nom du champ numéro $i dans la table |
| mysql_data_seek($resultat,0) | Déplace le pointeur interne de résultat au début du résultat |
| $num=mysql_errno() | Retourne le numéro de message d'erreur de la dernière opération MySQL. |
| $texte=mysql_error() | Retourne le texte associée avec l'erreur générée lors de la dernière requête. |