info2gestion

PHP

MySqli requête préparée select en poo - exemple

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

Test requête

Exemple de fichier de requête avec php mysqli (orienté objet)

Cet exemple montre une requête simple sécurisée avec une requête préparée. Cette requête test avec des mots anglais français à titre d'exemple une connexion mysqli en programmation orientée objet.

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



 <?php

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

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

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

try {
  $conn = new mysqli(SVR_IP, UTILISATEUR, MOTDEPASSE); // 4
} catch (mysqli_sql_exception $e) {
  echo("<p>Echec de la connexion</p>");
  $erreur = $e->getMessage();
  //die($erreur); // 5
}

$conn->select_db("bdd_01"); // 6

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

$stmt = $conn->prepare($sql); // 8
$stmt->bind_param('s', $f_letterB); // 9

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

$stmt->execute(); // 11

$results = $stmt->get_result(); // 12

if (!$results){
  //trigger_error(mysqli_error($conn), E_USER_ERROR);// 13
}

if (isset($conn)){
  $conn -> close(); // 14
}

if ($results->num_rows > 0) { // 15

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

  while($row = $results->fetch_object()){  // 16
    $ligne .= "<tr>";
    $ligne .= "<td>" . $row->col1 . "</td>";
    $ligne .= "<td>" . $row->col2 . "</td>";
    $ligne .= "<td>" . $row->col3 . "</td>";
    $ligne .= "</tr>";
    echo $ligne;
  }
  echo "</table>";

  $results->free_result(); // 17

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

1 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

2 Condition sur la validité de la variable

3 - 5 Voir les étapes de connection

6 Sélection de la base de données avec ->select_db()

7 Requête paramétrée avec la balise ? pour placer la variable avec la méthode bind_param()

8 Déclaration requête préparée avec la méthode prepare()

9 Affectation de la balise ? avec ->bind_param()

10 Préparation de la variable de la clause LIKE de la requête

11 Exécution de la requête avec ->execute()

12 Copie de l'adresse des résultats avec ->get_result()

13 Condition en cas d'erreur pour afficher un message - affichage uniquement en développement

14 Fermeture de la connection

15 Condition en cas d'absences de résultat avec num_rows

16 Lecture des résultats avec fetch_object()

17 Libération de la mémoire qui contient les donnnées avec free_result()

18 Retour de la condition en cas de requête qui ne retourne pas de résultats


Le script ci-dessus montre un usage simple de php pdo avec une requête préparée. Pour les paramètres de la requête, en cas de saisie de l'utilisateur, il est conseillé de valider la saisie avant avec filter_var() et après avec htmlspecialchars().