(PHP 8 >= 8.6.0)
mysqli::quote_string -- mysqli_quote_string — Entoure de guillemets et protège une chaîne pour l'utiliser dans une requête SQL
Style orienté objet
Style procédural
Cette fonction est utilisée pour créer une chaîne SQL valide qui pourra être utilisée dans une requête SQL. La chaîne donnée est échappée de la même façon que par mysqli::real_escape_string(), en tenant compte du jeu de caractères courant de la connexion, et le résultat est entouré de guillemets simples. La valeur retournée doit donc être insérée dans la requête sans ajouter d'autres guillemets autour d'elle.
Contrairement à mysqli::real_escape_string(), le résultat
est également sûr lorsque le mode SQL NO_BACKSLASH_ESCAPES
est activé sur la connexion.
Le jeu de caractères doit être défini soit au niveau serveur, soit avec la fonction API mysqli_set_charset() pour qu'il affecte la fonction mysqli_quote_string(). Voir la section sur les concepts des jeux de caractères pour plus d'informations.
Note:
L'ajout de guillemets ne convient qu'aux littéraux de type chaîne. Cela ne sécurise pas les identifiants, tels que les noms de tables ou de colonnes. Dès que c'est possible, il faut utiliser des requêtes préparées plutôt que de construire les requêtes manuellement.
mysqlSeulement en style procédural : Un objet mysqli retourné par la fonction mysqli_connect() ou mysqli_init().
stringLa chaîne de caractères à entourer de guillemets et à échapper.
Les caractères encodés sont NUL (ASCII 0),
\n, \r, \,
', ", et
CTRL+Z.
Si le mode SQL NO_BACKSLASH_ESCAPES est activé sur
la connexion, seul ' est encodé, en le doublant.
Retourne la chaîne échappée, entourée de guillemets simples.
Exemple #1 Exemple avec mysqli::quote_string()
Style orienté objet
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "'s-Hertogenbosch";
/* Cette requête avec $city entouré de guillemets fonctionnera */
$query = sprintf("SELECT CountryCode FROM City WHERE name=%s", $mysqli->quote_string($city));
$result = $mysqli->query($query);
printf("Select a retourné %d lignes.\n", $result->num_rows);
/* Cette requête échouera, car $city n'a pas été entouré de guillemets ni échappé */
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'", $city);
$result = $mysqli->query($query);Style procédural
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "'s-Hertogenbosch";
/* Cette requête avec $city entouré de guillemets fonctionnera */
$query = sprintf("SELECT CountryCode FROM City WHERE name=%s", mysqli_quote_string($mysqli, $city));
$result = mysqli_query($mysqli, $query);
printf("Select a retourné %d lignes.\n", mysqli_num_rows($result));
/* Cette requête échouera, car $city n'a pas été entouré de guillemets ni échappé */
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'", $city);
$result = mysqli_query($mysqli, $query);Les exemples ci-dessus vont afficher quelque chose de similaire à :
Select a retourné 1 lignes. Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's-Hertogenbosch'' at line 1 in...