mysqli::real_escape_string

mysqli_real_escape_string

(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

Description

Style orienté objet

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

Style procédural

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

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_real_escape_string(). Voir la section sur les concepts des jeux de caractères pour plus d'informations.

Avertissement

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.

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 à é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 une chaîne de caractères échappée.

Exemples

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

Voir aussi