info2gestion

MENU3

Accueil>

PHP

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

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

Test requête

Exemple de fichier de requête 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_glob.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();
}

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

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

$stmt->bindParam(1, $f_letterB, PDO::PARAM_STR); // 11
$stmt->bindParam(2, $f_letterB, PDO::PARAM_STR);

$f_letterB = $f_letter.'%';

$stmt->execute();

$pdo_conn = null; // 12

$nb_lig = $results->rowCount();

if ($nb_lig > 0) { // 13

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

  while($row = $stmt->fetch()){  // 14
    $ligne = "<tr>";
    $ligne .= "<td>" . $row['col1'] . "</td>";
    $ligne .= "<td>" . $row['col2'] . "</td>";
    $ligne .= "<td>" . $row['col3'] . "</td>";
    $ligne .= "</tr>";
    echo $ligne;
    $ligne = "";
  }
  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 prepare()

11 Application des paramètres aux balises avec bindParam()

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

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

14 Affichage des données avec une boucle while et fetch.


Il est également possible d'utiliser les variables dans la fonction execute() et bindParam() n'est plus utile.


 <?php

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

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

  $f_letterB = $f_letter.'%';

  $stmt->execute([$f_letterB,$f_letterB]);
  ...
?>
  

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 validation de saisie seront nécessaires pour augmenter la sécurité...

info site

date de modification:

octobre 2023