MySQL PHP: connexion bd PDO

Méthodes: exec et query

exec -> requetes de maj

modifier le mot de passe des membres
<?php
$connexion = new PDO("mysql:host=$PARAM_hote;dbname=$PARAM_nom_bd", $PARAM_user, $PARAM_mot_passe); // connexion à la BDD
$connexion->exec("UPDATE membres SET mot_pass='toto'"); // on modifie le mot de passe de tous les utilisateurs
?>

savoir le nombre de lignes qui ont été affectées
<?php
// création d'une connexion

$nombre_changement=$connexion->exec("UPDATE membres SET mot_pass='toto'"); // modif pw de tous les users
echo "La requête à modifié : $nombre_changement lignes.";
?>

query -> SELECT

liste des membres

<?php
$connexion = new PDO("mysql:host=$PARAM_hote;dbname=$PARAM_nom_bd", $PARAM_user, $PARAM_mot_passe); // connexion à la BDD
$resultats=$connexion->query("SELECT membre FROM membres ORDER BY membre ASC"); // tous les membres de la table qu'on trie par ordre croissant
$resultats->setFetchMode(PDO::FETCH_OBJ); // résultat récupérable sous forme d'objet
while( $ligne = $resultats->fetch() ) // récup la liste des membres
{
        echo 'Utilisateur : '.$ligne->membre.'<br />'; // affiche les membres
}
$resultats->closeCursor(); // on ferme le curseur des résultats
?>

setFetchMode sous quel format on souhaite récupérer les résultats de la requête précédente. Il y a aussi: PDO::FETCH_ASSOC, PDO::FETCH_BOTH, PDO::FETCH_OBJ...

méthode plus courte d'écriture pour spécifier le mode, en le spécifiant directement dans fetch():
    <?php
    $ligne = $resultats->fetch(PDO::FETCH_OBJ)
    ?>

closeCursor permet de fermer le curseur associé à un jeu de résultats, il doit donc être fermé une fois que vous avez fini de récupérer les résultats, et également être fermé avant toute autre requête.

requetes préparées - méthode: prepare

prépare une requête SQL à être exécutée en offrant la possibilité de mettre des marqueurs qui seront substitués lors de l'exécution.
Il existe 2 types de marqueurs qui sont respectivement ? et les marqueurs nominatifs. Ces marqueurs ne sont pas mélangeables : donc pour une même requête, il faut choisir l'une ou l'autre des options.

liste des membres (sans marqueur)

<?php
// ouverture d'une connexion ...
$requete_prepare_1=$connexion->prepare("SELECT identifiant FROM membres"); // on prépare notre requête
$requete_prepare_1->execute();
while($lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ))
{
        echo $lignes->identifiant.'<br />';
}
?>

marqueurs nominatifs

<?php
$requete_prepare_1=$connexion->prepare("SELECT identifiant FROM membres WHERE ID_membre = :id"); // on prépare notre requête
$requete_prepare_1->execute(array( 'id' => 1 ));
$lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ);
echo $lignes->identifiant.'<br />';
?>

avec marqueur ?

<?php
$requete_prepare_1=$connexion->prepare("SELECT identifiant FROM membres WHERE ID_membre = ? ");
$requete_prepare_1->execute(array( 1 ));
$lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ);
echo $lignes->identifiant.'<br />';
?>

 

 

Sécuriser sans passer par des requêtes préparées Methode quote

<?php
$RessourceDeConnection = new PDO(...); // ouverture d'une connection
$RessourceDeConnection->query("SELECT id_membre FROM membres WHERE nom = ".$RessourceDeConnection->quote($nom, PDO::PARAM_STR));
?>

Valeurs possibles pour le deuxième argument (si vous ne spécifiez pas de deuxième argument, la valeur PDO::PARAM_STR sera utilisée) :
- PDO::PARAM_STR : pour une chaîne de caractères ;
- PDO::PARAM_INT : pour le type 'integer' de SQL ;
- PDO::PARAM_NULL : pour le type NULL de SQL ;
- PDO::PARAM_BOOL : pour un booléen ;
- PDO::PARAM_LOB : pour le type 'objet large' de SQL.

Note: n'englobez aucune valeur avec ''

 

sources