TP9 : mysql/php utilisation de PDO - Cours-info

PHP, PDO : requête avec INSERT, UPDATE et DELETE sur MYSQL
1. Accès à mySQL via PHP.
PHP permet d'interfacer des pages avec de multiples serveurs de base de données, notamment mySQL. PHP permet de se connecter au serveur (avec un nom d'utilisateur et un mot de passe), choisir une base
et de faire des requêtes SQL.
Il existe 2 principaux API interfaces de programmation (abr. API pour Application Programming Interface) : MYSQLI et PDO
On utilisera de préférence PDO car cette API est compatible avec mysql et d'autres SGBD (oracle postgreSQL ….) , cependant elle fonctionne uniquement en mode Objet.
http://php.net/manual/fr/mysqlinfo.api.choosing.php
http://fmaz.developpez.com/tutoriels/php/comprendre­pdo/
2. Premier Test : la connexion, exécution d'une instruction SQL
Ajouter dans une page php ( page1_tp9.php ) le script suivant en le modifiant NE PAS faire un copier coller du document PDF !!! le récupérer dans le fichier texte joint
Modifier les paramètres de connexion :
A l'iut, • Modifier le nom du serveur mysql que vous voulez utiliser : serveurmysql et non localhost (nom de la machine ou localhost si serveur local)
• Modifier le nom d'utilisateur : votrelogin • Modifier le Mot de passe pour vous connecter
• Modifier le nom de la base de données : nom de votre base de données
signification DSN, voir documentation http://php.net/manual/fr/ref.pdo­mysql.connection.php
<?php
$dsn = 'mysql:dbname=maBaseDeDonnee;host=localhost';
$user = 'LoginUser';
$password = 'Password';
try {
$ma_connexion_mysql = new PDO($dsn, $user, $password);
$ma_connexion_mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// pour afficher les erreurs
$ma_connexion_mysql->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8');
// pour récupérer le résultat des requêtes SELECT sous forme de tableaux associatifs
$ma_connexion_mysql->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo 'Connexion échouée : ' . $e->getMessage();
}
?>
<?php
echo " <br> affiche des informations à propos d'une variable, de manière à ce qu'elle soit
lisible : ";
print_r($ma_connexion_mysql);
echo " <br> affiche les informations structurées d'une variable : ";
var_dump($ma_connexion_mysql);
?>
•
•
exécuter le script ci dessus : 2 méthodes ◦ exécution dans un terminal : php monscript.php (ne fonctionne avec PDO à l'iut : le driver n'est pas installé )
◦ interprétation du script par apache : l'ouverture du fichier par un navigateur web interprète et exécute le script PHP
Que se passe t'il en cas d'erreur ?
MySql_TP9_09_14_pdo.odt
1
16/11/2014
3. exécution d'une instruction SQL
Dans la documentation, on peut lire ( ref : http://php.net/manual/fr/pdo.exec.php )
PDO::exec() exécute une requête SQL dans un appel d'une seule fonction, retourne le nombre de lignes affectées par la requête. PDO::exec() ne retourne pas de résultat pour une requête SELECT. Pour une requête SELECT dont vous auriez besoin une seule fois dans le programme, utilisez plutôt la fonction PDO::query(). Pour une
requête dont vous auriez besoin plusieurs fois, préparez un objet PDOStatement avec la fonction PDO::prepare() et exécutez la requête avec la fonction PDOStatement::execute(). Et aussi ( ref : http://php.net/manual/fr/pdo.query.php )
PDO::query() exécute une requête SQL en appelant une seule fonction, retourne le jeu de résultats (s'il
y en a) retourné par la requête en tant qu'objet PDOStatement. Conclusion pour effectuer une requête SQL de type INSERT UPDATE ou DELETE, on utilise la méthode
exec et pour une requête de type SELECT on utilise la méthode query utilisation : <?php
$ma_commande_SQL=" ecrire une commande SQL avec INSERT UPDATE ou DELETE " ;
if($ma_connexion_mysql!= NULL){ $nbr_lignes_affectees=$ma_connexion_mysql­>exec($ma_commande_SQL);
echo "<br> nbre de lignes affectees : ".$nbr_lignes_affectees; } ?>
4. Application : Requête UPDATE, DELETE et INSERT
Reprendre la base de donnée du tp6 (table Etudiant), réaliser un script qui supprime la table et la recrée avec tous les champs (reprendre les INSERT)
Exercice 1
* faire un script SQL qui supprime puis crée la table Etudiant et insère tous les champs : ce script SQL est à réutiliser avant chaque exercice.
* tester une requête pour modifier la ville (Ville_ETU) par « valdoie», le code postal par « 90300 » et l'adresse pas « 7 rue du chateau » pour l'étudiant ayant l'identifiant 26. Ces données sont dans des variables : $rue, $ville, $code_postal et $id_etudiant
•
Après avoir créer une connexion sur la base de données, tester le code ci dessous :
<?php $rue='7 rue du chateau'; $ville='Valdoie'; $code_postal='90300'; $id_etudiant=26; $ma_commande_SQL ="UPDATE Etudiant SET Adresse_ETU ='".$rue."
', Ville_ETU = '".$ville."',Code_Postal_ETU = '".$code_postal."' WHERE Id_ETU = ".$id_etudiant; echo $ma_commande_SQL; if($ma_connexion_mysql!= NULL){ $nbr_lignes_affectees=$ma_connexion_mysql­>exec($ma_commande_SQL); echo "<br> nbre de lignes affectees : ".$nbr_lignes_affectees; } ?>
MySql_TP9_09_14_pdo.odt
2
16/11/2014
Exercice 2 Exercice 2 :
sur le même principe
Les étudiants Delanoe, Rigoulot, Boulanger et Faivre respectent les critères pour être boursiers : modifier le critère de bourse de ces étudiants : (mettre Boursier_ETU à O). Utiliser leurs identifiants qui
existent dans 4 variables, voici un exemple de début de script :
<?php $id_etu_11=11;
$id_etu_13=13;
$id_etu_15=15
$id_etu_17=17;
$ma_commande_SQL ="
étape 1 : tester la requête en SQL
étape 2 : écrire en PHP une chaîne de texte qui correspond à votre requête SQL en utilisant les variables ci dessus
étape 3 : exécuter la chaîne de texte à l'aide de PDO sur MYSQL
Exercice 3 Exercice 3 :
sur le même principe
Les étudiants Zilliox et Boulanger se réorientent : supprimer les étudiants de la base de données. Utiliser leurs identifiants qui existent dans 2 variables : <?php $id_etu_3=3;
$id_etu_4=4;
$ma_commande_SQL ="
étape 1 : tester la requête en SQL
étape 2 : écrire en PHP une chaîne de texte qui correspond à votre requête SQL en utilisant les variables ci dessus
étape 3 : exécuter la chaîne de texte à l'aide de PDO sur MYSQL
Exercice 4 Exercice 4 :
Insérer un étudiant un étudiant dans la base de données : Créer les variables ci dessous :
<?php $Nom_ETU="dubois";
$Adresse_ETU="7 rue du bois";
$Ville_ETU ="Belfort";
$Code_Postal_ETU ="90000";
$Telephone_ETU="0381940000";
$Date_Naissance_ETU ="1997­07­27";
$Sexe_ETU="M";
$Boursier_ETU="N";
$ma_commande_SQL ="
Pour les champs groupe_id_ETU, semestre_id_ETU,note_ue1_ETU,note_ue2_ETU mettre des valeurs NULL.
étape 1 : tester la requête en SQL
étape 2 : écrire en PHP une chaîne de texte qui correspond à votre requête SQL en utilisant les variables ci dessus
étape 3 : exécuter la chaîne de texte à l'aide de PDO sur MYSQL
MySql_TP9_09_14_pdo.odt
3
16/11/2014