PHP & MySQL
-
Upload
said-radhouani-phd -
Category
Documents
-
view
1.501 -
download
6
description
Transcript of PHP & MySQL
PHP + MySQL
Saïd Radhouani
Université de Genèveavril 2008
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
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");
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);
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>"; }
}
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
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)
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);
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>");
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>";} }?>
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");
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; }}}?>
13
Déconnexion
mysql_close($connexion);
Si on oublie de le faire, déconnexion automatique à la fin du script
14
Liens
http://www.manuelphp.com/
http://www.mysql.fr/
http://www.phpfrance.com/
15
Structure d’une BD
journaux
articles
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)
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’
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 !
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%’
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’
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