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é…