(PHP 5, PHP 7, PHP 8)
mysqli::real_escape_string -- mysqli_real_escape_string — Protège les caractères spéciaux d'une chaîne pour l'utiliser dans une requête SQL, en prenant en compte le jeu de caractères courant de la connexion
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 de caractères
string est encodée pour produire une chaîne SQL échappée,
en tenant compte du jeu de caractères courant de 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_real_escape_string(). Voir la section sur les concepts des jeux de caractères pour plus d'informations.
Cette fonction n'ajoute pas de guillemets autour du résultat : ils doivent être
ajoutés par l'appelant. Si le mode SQL NO_BACKSLASH_ESCAPES est
activé sur la connexion, seul le guillemet simple
(') est échappé : une valeur placée entre guillemets doubles
(") peut donc terminer la chaîne et permettre une injection SQL.
Il faut utiliser à la place des
requêtes préparées.
Si ce n'est pas possible, il faut utiliser
mysqli::quote_string(), qui entoure toujours le
résultat de guillemets simples.
mysqlSeulement en style procédural : Un objet mysqli retourné par la fonction mysqli_connect() ou mysqli_init().
stringLa chaîne de caractères à é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 une chaîne de caractères échappée.
Exemple #1 Exemple avec mysqli::real_escape_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 échappé fonctionnera */
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'",
$mysqli->real_escape_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é é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 échappé fonctionnera */
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'",
mysqli_real_escape_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é é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...