Programmation MySQL/PHP Programmation MySQL/PHP – p.1/19 CGI et bases de données Principe : création de documents à partir d’une BD MySQL se charge du stockage, de la protection des données, de l’interface SQL PHP : extrait des données et les met en forme reçoit des données et les stocke Le navigateur fournit l’interface graphique Architecture à trois pôles, à la sauce Web Programmation MySQL/PHP – p.2/19 Architecture MySQL/PHP Prog. client (navigateur) Client HTTP requêtes requêtes Internet document(s) programme SQL serveur Serveur mysqld données HTML Fichiers PHP Base de données Site web avec scripts PHP et MySQL Programmation MySQL/PHP – p.3/19 Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30), annee INTEGER, nomMES VARCHAR (30), prenomMES VARCHAR (30), anneeNaiss INTEGER ); Programmation MySQL/PHP – p.4/19 Les principales fonctions MySQL/PHP mysql_pconnect (serveur, nom, passe) établit une connexion. Si OK, renvoie un identifiant non nul cnx mysql_select_db(base, cnx) se place dans une base et renvoie vrai si OK mysql_query (requete, cnx) exécute une requête et renvoie un identifiant mysql_fetch_object (resultat) renvoie la ligne suivante sous forme d’objet Programmation MySQL/PHP – p.5/19 La fonction mysql_pconnect Première fonction à appeler pour accéder à MySQL. On lui passe le nom du serveur, le login utilisateur et le mot de passe; ⇒ la fonction essaie de se connecter au serveur. Si la connexion réussit: un identifiant de connexion est renvoyé; sinon la fonction renvoie 0; L’identifiant doit ensuite être utilisé pour tous les appels à MySQL Essentiel: bien tester la valeur retournée. Si elle vaut 0, il y a un problème. Programmation MySQL/PHP – p.6/19 La fonction mysql_select_db Seconde fonction: elle sert à choisir la base sur laquelle on travaille. On lui passe le nom de la base, et l’identifiant de connexion. Le serveur place connecte dans la base choisie, sauf si l’utilisateur n’a pas les droits. La fonction renvoie 0 si la connexion à la base échoue, ou un nombre non nul sinon. Noter: connexion à MySQL en deux étapes, le serveur puis la base. Programmation MySQL/PHP – p.7/19 Exemple de connexion $cnx = mysql_pconnect ("localhost", "rigaux", "toto"); if ($cnx == 0) { echo "Connexion à localhost impossible"; exit; } if (mysql_select_db ("mabase", $cnx) == 0) { echo "Accès à " . BASE . " impossible\n"; exit; } Mieux vaut isoler cette partie de code dans une fonction. Programmation MySQL/PHP – p.8/19 Fonction de connexion function Connexion ($nom, $passe, $base, $serveur) { // Connexion au serveur $cnx = mysql_pconnect ($serveur, $nom, $passe); if ($cnx == 0) { echo "Connexion à $serveur impossible\n"; exit; } // Connexion à la base if (mysql_select_db ($base, $cnx) == 0) { echo "Accès à $base impossible\n"; echo mysql_error($cnx); exit; } // On renvoie la variable de connexion return $cnx; Programmation MySQL/PHP – p.9/19 La fonction mysql_query Elle permet d’exécuter n’importe quelle commande SQL. On lui passe le texte de la commande SQL, et l’identifiant de connexion. Le serveur exécute la commande, et renvoie un identifiant de résultat. La fonction renvoie 0 si la commande échoue. Noter: la fonction mysql_error permet de récupérer le texte du message d’erreur au besoin. Programmation MySQL/PHP – p.10/19 La fonction mysql_fetch_object Elle ramène une ligne d’un résultat d’une interrogation SQL. Voici le principe (dit de « curseur »). On exécute la requête SELECT avec mysql_query. On récupère l’identifiant de résultat. Le premier appel à mysql_fetch_object: renvoie la première ligne du résultat sous forme d’objet. Chaque nouvel appel renvoie la ligne suivante. Si la fonction renvoie 0, c’est terminé. On boucle jusqu’à ce que mysql_fecth_object renvoie 0. Programmation MySQL/PHP – p.11/19 Application (ExMyPHP1.php) $resultat = mysql_query ("SELECT * FROM FilmSimple", $connexion); if ($resultat != 0) { while($film = mysql_fetch_object ($resultat)) { echo "$film->titre, " . "paru en $film->annee, " . "réalisé par $film->nomMES.<BR>"; } } else echo "Erreur rencontrée: " . mysql_error($connexion); Programmation MySQL/PHP – p.12/19 En association avec un formulaire <FORM ACTION="ExMyPHP2.php" METHOD=POST> Ce formulaire vous permet d’indiquer des paramètres pour la recherche de films : <P> Titre : <INPUT TYPE=TEXT SIZE=20 NAME=’titre’ VALUE=’%’><BR> <P> Année début : <INPUT TYPE=TEXT SIZE=4 NAME=’anMin’ VALUE=1900> Année fin : <INPUT TYPE=TEXT SIZE=4 NAME=’anMax’ VALUE=2100> <P> <INPUT TYPE=SUBMIT VALUE=’Rechercher’> </FORM> Programmation MySQL/PHP – p.13/19 Le script PHP (1) require ("Connect.php"); require ("Connexion.php"); // On récupère les paramètres $titre=$_REQUEST[’titre’]; $anMin=$_REQUEST[’anMin’]; $anMax=$_REQUEST[’anMax’]; echo "Titre = $titre " . " Annnée début = $anMin " . "Année fin=$anMax<HR>"; // On crée la requête $requete = "SELECT * FROM FilmSimple " . "WHERE titre LIKE ’$titre’ " . "AND annee BETWEEN $anMin and $anMax"; Programmation MySQL/PHP – p.14/19 Le script PHP (ExForm2.html) // On se connecte $connexion = Connexion (NOM, PASSE, BASE, SERVEUR); // On exécute la requête $resultat = mysql_query ($requete, $connexion); while ($film = mysql_fetch_object ($resultat)) { echo "$film->titre, paru en $film->annee, " . " réalisé par $film->prenomMES " . " $film->nomMES.<BR>\n"; } Programmation MySQL/PHP – p.15/19 Mise à jour de la base On utilise un formulaire de saisie, et on déclenche: Un ordre INSERT pour des insertions Un ordre UPDATE pour une modification Un ordre DELETE pour une destruction Dans tous les cas la fonction mysql_query permet d’exécuter l’ordre. Programmation MySQL/PHP – p.16/19 Exemple : mise à jour de FilmSimple <FORM ACTION="ExMyPHP3.php" METHOD=POST> Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"><B Année : <INPUT TYPE=TEXT SIZE=4 MAXLENGTH=4 NAME="annee" VALUE="2000"> <P> Nom : <INPUT TYPE=TEXT SIZE=20 NAME="prenom"> Prénom : <INPUT TYPE=TEXT SIZE=20 NAME="nom"><B <H1>Votre choix</H1> <INPUT TYPE=SUBMIT VALUE=’Insérer’ NAME=’inserer’ > <INPUT TYPE=SUBMIT VALUE=’Modifier’ NAME=’modifier’ > <INPUT TYPE=SUBMIT VALUE=’Détruire’ NAME=’detruire’ > </FORM> Programmation MySQL/PHP – p.17/19 Le script PHP (1) <?php require ("Connect.php"); // Test du type de mise à jour effectuée if (isset($inserer)) echo "Insertion du film $titre"; elseif (isset($modifier)) echo "Modification du film $titre"; elseif (isset($detruire)) echo "Destruction du film $titre"; Programmation MySQL/PHP – p.18/19 Le script PHP (ExForm3.html) if (isset($inserer)) $requete = "INSERT INTO FilmSimple (titre, annee, " . "prenomMES, nomMES, anneeNaiss) " . "VALUES (’$titre’, $annee, " . "’$nom’, ’$prenom’, $anneeNaiss) "; if (isset($modifier)) $requete = "UPDATE FilmSimple SET annee=$annee, " . "prenomMES = ’$prenom’, nomMES=’$nom’, . "anneeNaiss=$anneeNaiss WHERE titre = ’ if (isset($detruire)) $requete = "DELETE FROM FilmSimple " . "WHERE titre=’$titre’"; $resultat = mysql_query ($requete, $connexion); Programmation MySQL/PHP – p.19/19