PHP & MySQL

21
PHP + MySQL Saïd Radhouani Université de Genève avril 2008

description

Développement Web, base de données

Transcript of PHP & MySQL

Page 1: PHP & MySQL

PHP + MySQL

Saïd Radhouani

Université de Genèveavril 2008

Page 2: PHP & MySQL

2

PHP + MySQL : Interfaçage avec une base de données

Générer des pages à partir des données de la base Mettre à jour des bases de données à partir de pages

Déroulement1. connexion au SGBD

2. connexion à la base de données

3. “fabrication” d’une requête SQL (éventuellement en fonction d’informations entrées dans un formulaire)

4. envoi de la requête à MySQL

5. récupération et affichage des résultats

6. déconnexion

Page 3: PHP & MySQL

3

Connexion au système de gestion de base de données (SGBD)

connexion à un serveur

• mysql_connect(hôte, nom_utilisateur, mot de passe)

Si connexion établie => identificateur de connexion (valeur de Si connexion établie => identificateur de connexion (valeur de type Integer)type Integer)

Sinon (erreur) => FalseSinon (erreur) => False

exemple• $connexion = mysql_connect("localhost", "root", "root");

Page 4: PHP & MySQL

4

Accès à la base de données

Après la connexion au SGBD• Sélectionner la base de données

mysql_select_db(nom_base, $connexion) ;toutes les requêtes suivantes seront effectuées sur la base

sélectionnée

exemple • mysql_select_db("presse", $connexion);

Page 5: PHP & MySQL

5

Accès aux bases de données

Liste des bases de données et de leurs tables respectives

$connexion = mysql_connect("localhost",  "root",  "root");$liste_bases = mysql_list_dbs($connexion );$nb_bases = mysql_num_rows($liste_bases);echo "<h3>Liste des bases de données</h3>";for($i = 0; $i < $nb_bases; $i++){

$nom_base_donnee = mysql_db_name($liste_bases, $i); $liste_tables = mysql_list_tables($nom_base_donnee, $connexion); $nb_tables = mysql_num_rows($liste_tables);  echo "<h3>" . $nom_base_donnee . "</h3>"; echo "<h4>Liste des tables :</h4>";

for($j = 0; $j < $nb_tables; $j++) { echo mysql_tablename($liste_tables, $j) . "<br>"; }

}

Page 6: PHP & MySQL

6

Construction d'une requête SQL

Requête SQL : chaîne de caractères qui doit répondre à la syntaxe SQL

La requête est envoyée à la base de données définie par un identificateur de connexion

mysql_query($requete, $connexion)

exemple• $requete = "select nom_journal from journaux" • $resultat = mysql_query($requete , $connexion);• $resultat : résultat sous forme d'un ensemble de lignes

Si erreur => $resultat contient la valeur false

Page 7: PHP & MySQL

7

Traitement des résultats d’une requête (1)

$resultat = mysql_query($requete, $connexion);

La variable $resultat n'est pas exploitable telle quelle=> Récupérer des informations sur les champs d'une table résultante d'une requête SQL

• Nombre des enregistrements d'une table$nb_champs = mysql_num_fields($resultat);

• Nombre des lignes d'une table$nb_lignes = mysql_num_rows($resultat);

• Le nom d'un champ$nom = mysql_field_name($resultat, $num_champ); ($num_champ : position numérique du champ qui

commence à partir de 0)

Page 8: PHP & MySQL

8

Traitement des résultats d’une requête (2)

Récupérer des informations sur les champs d'une table résultante d'une requête SQL

• Le type d’un champ$type_donnee = mysql_field_type($resultat, $num_champ);

• La longueur d'un champ$longueur = mysql_field_len($resultat, $num_champ);

• Nom de la table parente de la colonne$nom_table = mysql_field_table($resultat, $num_champ);

• Sémaphore du champ comme NOT NULL, PRIMARY KEY$semaphore = mysql_field_flags($resultat, $num_champ);

Page 9: PHP & MySQL

9

Traitement des résultats d’une requête (3)

exemple

$resultat = mysql_query("select nom_journal from journaux", $connexion) ;

1. Lecture du résultat ligne par ligne : mysql_fetch_row($resultat)2. Pour chaque ligne (tableau), lecture de chacune des cases

echo("<table>");while ($ligne = mysql_fetch_row($resultat)){ echo("<tr>"); for ($i=0; $i<mysql_num_fields($resultat); $i++) echo "<td>" . $ligne[$i] . "</td>";

echo("</tr>");}echo("</table>");

Page 10: PHP & MySQL

10

Traitement des résultats d’une requête (4)

<?php $connexion = mysql_connect("localhost", "root", "root"); mysql_select_db("presse", $connexion); $requete = "SELECT * FROM journaux"; $resultat = mysql_query($requete, $connexion) or die ("La requête est invalide : ".$requete."<br>"); $nb_champs = mysql_num_fields($resultat); $ligne = mysql_fetch_row($resultat); $type = array(); $propriete = array(); for ($i = 0; $i < $nb_champs; $i++) { $propriete[$i]['nom'] = mysql_field_name($resultat, $i); $propriete[$i]['type'] = mysql_field_type($resultat, $i); $propriete[$i]['longueur'] = mysql_field_len($resultat, $i);} for($i = 0; $i < $nb_champs; $i++) { echo "<h3>Colonne n°" . $i . "</h3>"; foreach($propriete[$i] as $cle => $valeur){ echo "<u>" . $cle . " :</u> <b>" . $valeur . "</b><br>";} }?>

Page 11: PHP & MySQL

11

Gestion des erreurs (1)

Il est possible d'interrompre le script afin d'éviter les erreurs en cascade => deux méthodes :

1. Stocker le résultat de l'exécution de la fonction dans une variable

Fonctions qui retournent le numéro et le message d'erreur généré par la dernière commande MySQL

$num_erreur = mysql_errno();

$message = mysql_error();

v Utiliser la fonction die() en cas d'erreur d'exécution

mysql_connect( "hôte", "user_name", "password") or die ("erreur de connexion au serveur hôte");

Page 12: PHP & MySQL

12

Gestion des erreurs (2)

<?php $connexion = mysql_connect("localhost", "root", "mot"); if (!$connexion) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur

numéro " . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message;} else {$reussite = mysql_select_db( "presse"); if (!$reussite) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur

numéro " . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message;} else{$requete = mysql_query("SELECT * FROM journaux"); if (!$requete) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur numéro

" . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message; }}}?>

Page 13: PHP & MySQL

13

Déconnexion

mysql_close($connexion);

Si on oublie de le faire, déconnexion automatique à la fin du script

Page 14: PHP & MySQL

14

Liens

http://www.manuelphp.com/

http://www.mysql.fr/

http://www.phpfrance.com/

Page 15: PHP & MySQL

15

Structure d’une BD

journaux

articles

Page 16: PHP & MySQL

16

Insertion de données dans une table

INSERT INTO nom_table (nom_colonne, ...)VALUES (valeur1, ...)

exemple : insérer un article

INSERT INTO articles (titre_article, nom_auteur, nom_journal, numero)VALUES (‘les engrais pour le jardin’, ‘D. Müller’, ‘La Feuille de Chou’, 17)

Page 17: PHP & MySQL

17

Modification de données

UPDATE nom_table SET nom_colonne=valeur, ...WHERE condition

exemple : changement de l’adresse de l’éditeur “Edipresse”

UPDATE editeurs SET adresse_editeur=‘Neuchâtel’WHERE nom_editeur=‘Edipresse’

Page 18: PHP & MySQL

18

Supression de données

DELETE FROM nom_table WHERE condition

exemple : supprimer tous les articles du journal Le Temps

DELETE FROM articles WHERE nom_journal=‘Le Temps’

!! ATTENTION : si on ne met pas de condition, toutes les lignes de la table seront supprimées !

Page 19: PHP & MySQL

19

Sélections

SELECT * FROM nom_table WHERE condition

exemples• afficher le contenu de la table articles

SELECT * FROM articles• afficher tous les articles de la Tribune de Genève

SELECT * FROM articles WHERE nom_journal=‘la Tribune de Genève’

• afficher le nombre d’articles de la Tribune de GenèveSELECT count(*) FROM articles WHERE nom_journal=‘la Tribune de Genève’

• afficher tous les articles parus dans des journaux dont le nom contient ‘Tribune’SELECT * FROM articles WHERE nom_journal LIKE ‘%Tribune%’

Page 20: PHP & MySQL

20

Sélections

Projection : affichage de certaines colonnesSELECT nom_colonne, ... FROM nom_table WHERE condition

exemples

• afficher les titres des articles, avec le nom de leur auteurSELECT titre_article, nom_auteur FROM articles

• afficher les titres des articles de Le TempsSELECT titre_article FROM articles WHERE nom_journal=‘Le Temps’

Page 21: PHP & MySQL

21

Sélections

Jointure : regrouper des données de plusieurs tables

SELECT nom_table.nom_colonne, ... FROM nom_table, ... WHERE condition_jointure (, autre_condition)

exemples

• afficher les titres des articles, leur auteur et l’adresse de ce dernier

SELECT articles.titre_article, article.nom_auteur, auteurs.adresse_auteurs

FROM articles, auteursWHERE article.nom_auteur = auteurs.nom_auteur