info2gestion

PHP

MySqli requête 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 (procédural)

Cet exemple montre une requête simple non sécurisée. 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

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

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

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

$conn = new mysqli(SVR_IP, UTILISATEUR, MOTDEPASSE); // 4

if($conn->connect_error) { // 5
  echo("<p>Echec de la connexion</p>");
  // die("<p>Echec de la connexion: (" . $conn->connect_error . ")</p>");
} else {
  // echo "<p>Paramètres de connection à la base de données valides</p>";
}

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

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

$sql = "SELECT col1, col2, col3 
        FROM bdd_table 
        WHERE col1 LIKE '$f_lettre'";

$results = $conn->query($sql); // 8

$conn -> close(); // 9

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

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

  while($row = $results->fetch_object()){  // 11
    echo "<tr>";
    echo "<td>" . $row->{'Adjectif masculin fr'} . "</td>";
    echo "<td>" . $row->{'Adj féminin fr'} . "</td>";
    echo "<td>" . $row->{'Adj anglais'} . "</td>";
    echo "</tr>";
  }
  echo "</table>";

  $results->free_result(); // 12

} else {
  die ("Aucun 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 Variable utilisée dans la clause LIKE de la requête

8 Exécution de la requête avec ->query()

9 Fermeture de la connection avec ->close()

10 Condition s'il y a des lignes en retour de la requête ->num_rows

11 Affichage des données avec une boucle while et ->fetch_object(). Un tableau associatif avec ->fetch_assoc() peut s'appliquer également.

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


Cet exemple en programmation objet montre l'utilisation extensive de la notation fléchée. Cette notation permet d'accéder à des propriétés, des méthodes ou des fonctions. L'utilisation des classes permet de créer des propriétés, méthodes et fonctions dédiées à une connection ou aux spécificités d'une base de données.

Dans cette version, la connection à la base de données est fermée en ligne 34 (11) juste après l'exécution de la requête.

Les données de la requête sont libérées de la mémoire en ligne 49 (14) juste après la boucle while d'affichage des données.

Ce sont des précautions pour diminuer la charge sur le serveur en cas de connections multiples ou de données volumineuses.



La version suivante utilise un bloc try...catch pour arriver au même résultat



 <?php
...

include_once('config_select.php');

try { // 1
  $conn = new mysqli(SVR_IP, UTILISATEUR, MOTDEPASSE);
} catch (mysqli_sql_exception $e) {
  $erreur = $e->getMessage(); // 2
  die($erreur);
}

...
?>

1 Bloc try...catch, d'autres modes sont possibles comme par exemple placer le script dans le bloc try et catch en fin de script.

2 Lecture du message d'erreur de la connection avec ->getMessage()


Pour l'exemple ci-dessus, le script ne propose pas de mesures de sécurité contre notamment les attaques par injection sql. Une de ces mesures est l'utilisation de requêtes préparées ou paramétrées.