mysqli::quote_string

mysqli_quote_string

(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

Description

Style orienté objet

public function mysqli::quote_string(string $string): string

Style procédural

function mysqli_quote_string(mysqli $mysql, string $string): string

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.

Attention

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.

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.

Liste de paramètres

mysql

Seulement en style procédural : Un objet mysqli retourné par la fonction mysqli_connect() ou mysqli_init().

string

La 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.

Valeurs de retour

Retourne la chaîne échappée, entourée de guillemets simples.

Exemples

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...

Voir aussi

  • 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
  • mysqli::set_charset() - Définit le jeu de caractères du client