info2gestion

PHP

Mysql requête préparée select avec pdo - exemple

Test avec base de données d'adjectifs anglais ou français

Test requête

Exemple de fichier de requête préparée avec php pdo

Cette requête test avec des mots anglais français à titre d'exemple une connexion mysqli en procédural

La traduction est approximative, il s'agit d'un exemple de gestion de données.



 <?php

include_once('config_conn.php'); // 1

$f_lettre_frm = $_POST['fletter']; 2

if (empty($f_letter)) { // 3
  die("Sélection lettre requise");
}

$dsn = "mysql:host=" . SVR_IP . ";dbname=" . BDD . ";charset=". CHRSET; // 4

try { // 5
  $pdo_conn = new PDO($dsn, UTILISATEUR, MOTDEPASSE); // 6
  $pdo_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 7
  // echo "Paramètres de connection à la base de données valides"; 
} catch (Exception $e) {
  error_log($e->getMessage()); // 8
  echo "<p>Erreur de connection paramètres base de données </p>";
  // echo "<p>Affichage erreur: </p>" . $e->getMessage();
}

$f_lettre = $f_lettre_frm.'%'; // 9

$sql = "SELECT col1, col2, col3 
        FROM bdd_table 
        WHERE adj_fr_masc LIKE ? 
        OR adj_eng LIKE ?"; 

$stmt = $pdo_conn->prepare($sql); // 10

$pdo_conn = null; // 11

$f_letterB = $f_letter.'%';// 12

$stmt->execute([$f_letterB,$f_letterB]);// 13

$arrValues = $results->fetchAll(PDO::FETCH_ASSOC); // 14

$nb_lig = $results->rowCount();

if ($nb_lig > 0) { // 15

  echo "<table style = 'border:1px solid black;' border = 1>;"

  echo "<tr>";

  foreach ($arrValues[0] as $cle => $xyz){
    print "<th>$cle</th>";  // 16
  }

  echo "</tr>";

  foreach ($arrValues as $row){
    echo "<tr>";
    foreach ($row as $cle => $val){
     echo "<td>$val</td>";// 17
    }
    echo "</tr>";
  }

  echo "</table>";

} else {
  die ("Aucun résultat");
}
?>

1-8 Voir les étapes de connection

2 Lecture de la sélection de la lettre dans la page web qui est transférée à dans une variable à php par javascript de manière asynchrone (la page ne recharge pas). Des exemples sur ces techniques et les alternatives (avec jquery notamment) seront publiés sur la partie développement javascript

3 Condition sur la validité de la variable

8 Envoi des erreurs dans un fichier log et affichage éventuel de l'erreur selon le mode développement production

9 Variable utilisée dans la clause LIKE de la requête

10 Création de la requête avec la méthode prepare() qui initialise le mode requête préparée

11 Fermeture de la connection avec ->$pdo_conn = null;

12 Paramètre de type texte

13 Exécution de la requête avec les paramètres

14 Méthode FetchAll pour stocker le résultat de la requête dans un tableau associatif

15 Condition s'il y a des lignes en retour de la requête $results->rowCount()

16 Affichage des titres des champs de la table de données du tableau associatif (1ère ligne) résultat de la requête

17 Pour chaque ligne (clé) du tableau associatif, on affiche les valeurs des champs (sous ensemble de données) de la ligne correspondante


Il est également possible d'utiliser bindParam() pour affecter un ou plusieurs paramètres à une requête préparée.


Cet exemple montre un usage simple d'une connexion à mysql avec l'api pdo. Dans le cas d'un formulaire de saisie plus complet, des validations de saisie seront nécessaires pour augmenter la sécurité...