Exemples basique de l'extension MySQLi

Cet exemple montre comment se connecter, exécuter une requête, utiliser un gestionnaire d'erreur basique, afficher les lignes résultantes, et se déconnecter d'une base de données MySQL.

Cet exemple utilise la base de données Sakila librement disponible qui peut être téléchargé depuis » dev.mysql.com, as described here. Pour faire fonctionner cet exemple, (a) installer sakila et (b) modifier les variables de connexion (host, votre_utilisateur, votre_mdp).

Exemple #1 Exemple de vue d'ensemble de l'extension MySQLi

<?php
// Passons une variable $_GET à notre exemple, dans ce cas
// c'est aid pour actor_id dans notre base de données Sakila.
// Rendons le par défaut à 1, et transtypons le en entier pour éviter
// les injections SQL et / ou des problèmes de sécurité connexe.
// Gérer tout ceci sort du cadre de cet exemple basique. Exemple :
//   http://example.org/script.php?aid=42
if (isset($_GET['aid']) && is_numeric($_GET['aid'])) {
    
$aid = (int) $_GET['aid'];
} else {
    
$aid 1;
}

// Se connecter et sélectioner une base de données MySQL nommé sakila
// Hostname: 127.0.0.1, username: votre_utilisateur, password: votre_mdp, db: sakila
$mysqli = new mysqli('127.0.0.1''votre_utilisateur''votre_mdp''sakila');

// Oh non ! Une connect_errno existe donc la tentative de connexion a échoué !
if ($mysqli->connect_errno) {
    
// La connexion a échoué. Que voulez-vous faire ? 
    // Vous pourriez vous contacter (email ?), enregistrer l'erreur, afficher une jolie page, etc.
    // Vous ne voulez pas révéler des informations sensibles

    // Essayons ceci :
    
echo "Désolé, le site web subit des problèmes.";

    
// Quelque chose que vous ne devriez pas faire sur un site public,
    // mais cette exemple vous montrera quand même comment afficher des
    // informations lié à l'erreur MySQL -- vous voulez peut être enregistrer ceci
    
echo "Error: Échec d'établir une connexion MySQL, voici pourquoi : \n";
    echo 
"Errno: " $mysqli->connect_errno "\n";
    echo 
"Error: " $mysqli->connect_error "\n";
    
    
// Vous voulez peut être leurs afficher quelque chose de jolie, nous ferons simplement un exit
    
exit;
}

// Réaliser une requête SQL
$sql "SELECT actor_id, first_name, last_name FROM actor WHERE actor_id = $aid";
if (!
$result $mysqli->query($sql)) {
    
// Oh non ! La requête a échoué. 
    
echo "Désolé, le site web subit des problèmes.";

    
// Denouveau, ne faite pas ceci sur un site public, mais nous vous
    // montrerons comment récupérer les informations de l'erreur
    
echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
    echo 
"Query: " $sql "\n";
    echo 
"Errno: " $mysqli->errno "\n";
    echo 
"Error: " $mysqli->error "\n";
    exit;
}

// Phew, nous avons réussie. Nous savons que la connexion MySQL et la requête 
// a réussi, mais avons nous un résultat ?
if ($result->num_rows === 0) {
    
// Oh, pas de lignes ! Dès fois c'est acceptable et attendue, dès fois
    // ce l'est pas. Vous décidez. Dans ce cas, peut être que actor_id était trop
    // large ?
    
echo "Nous n'avons pas trouvé de correspondance pour ID $aid, nous sommes désolé. Veuillez réessayer de nouveau.";
    exit;
}

// Maintenant, nous savons qu'un seul résultat existera dans cet exemple donc
// récupérons le dans un tableau associatif où les clés du tableau sont
// les noms de colonnes de la table
$actor $result->fetch_assoc();
echo 
"Parfois je vois " $actor['first_name'] . " " $actor['last_name'] . " à la TV.";

// Maintenant, récupérons cinq acteurs aléatoires et affichons leurs noms dans une liste.
// Nous ajouterons moins de gestion d'erreur car vous savez désormais faire ceci vous-même.
$sql "SELECT actor_id, first_name, last_name FROM actor ORDER BY rand() LIMIT 5";
if (!
$result $mysqli->query($sql)) {
    echo 
"Désolé, le site web subit des problèmes.";
    exit;
}

// Affichons nos 5 acteurs aléatoires, et un lien pour chaque acteur
echo "<ul>\n";
while (
$actor $result->fetch_assoc()) {
    echo 
"<li><a href='" $_SERVER['SCRIPT_FILENAME'] . "?aid=" $actor['actor_id'] . "'>\n";
    echo 
$actor['first_name'] . ' ' $actor['last_name'];
    echo 
"</a></li>\n";
}
echo 
"</ul>\n";

// Le script libérera automatiquement le résultat et fermera la connexion
// MySQL quand elle existe, mais faisons le quand même
$result->free();
$mysqli->close();
?>
add a note add a note

User Contributed Notes 2 notes

up
1
Eric D
4 years ago
Concatenating variables directly into a SQL statement is a huge anti-pattern that is likely to introduce a SQL injection exploit.

MySQLi includes prepared statements, which allow you to safely pass variable data to a SQL query: https://www.php.net/manual/en/mysqli.prepare.php

For more information on SQL Injection exploits please consult OWASP: https://owasp.org/www-community/attacks/SQL_Injection
up
-2
Anonymous
4 years ago
This is close to the worst way to use this. At least escape the strings, its 1 line
To Top