diff --git a/reference/mysqli/mysqli/quote-string.xml b/reference/mysqli/mysqli/quote-string.xml new file mode 100644 index 0000000000..eaf193d93b --- /dev/null +++ b/reference/mysqli/mysqli/quote-string.xml @@ -0,0 +1,174 @@ + + + + + mysqli::quote_string + mysqli_quote_string + Entoure de guillemets et protège une chaîne pour l'utiliser dans une requête SQL + + + + &reftitle.description; + &style.oop; + + public stringmysqli::quote_string + stringstring + + &style.procedural; + + stringmysqli_quote_string + mysqlimysql + stringstring + + + 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. + + + Sécurité : Le jeu de caractères par défaut + + 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. + + + + + 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. + + + + + + &reftitle.parameters; + + + &mysqli.link.description; + + string + + + La &string; à entourer de guillemets et à échapper. + + + Les caractères encodés sont NUL (ASCII 0), + \n, \r, \, + ', ", et + CTRLZ. + Si le mode SQL NO_BACKSLASH_ESCAPES est activé sur + la connexion, seul ' est encodé, en le doublant. + + + + + + + + + &reftitle.returnvalues; + + Retourne la chaîne échappée, entourée de guillemets simples. + + + + + &reftitle.examples; + + Exemple avec <methodname>mysqli::quote_string</methodname> + &style.oop; + +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.procedural; + + + + &examples.outputs.similar; + + + + + + + + &reftitle.seealso; + + mysqli::real_escape_string + mysqli::set_charset + + + + + diff --git a/reference/mysqli/mysqli/real-escape-string.xml b/reference/mysqli/mysqli/real-escape-string.xml index 354381020e..d7509a7120 100644 --- a/reference/mysqli/mysqli/real-escape-string.xml +++ b/reference/mysqli/mysqli/real-escape-string.xml @@ -1,6 +1,5 @@ - - + mysqli::real_escape_string @@ -40,6 +39,20 @@ 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. + + @@ -53,12 +66,14 @@ La &string; à échapper. - + Les caractères encodés sont NUL (ASCII 0), \n, \r, \, ', ", et CTRLZ. - + Si le mode SQL NO_BACKSLASH_ESCAPES est activé sur + la connexion, seul ' est encodé, en le doublant. + @@ -131,11 +146,10 @@ Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax &reftitle.seealso; - - - mysqli_set_charset - - + + mysqli_set_charset + mysqli_quote_string +