8.80 MySQL
8 Référence des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes pré-définies . Notes . Exemples . mysql_affected_rows . mysql_change_user . mysql_client_encoding . mysql_close . mysql_connect . mysql_create_db . mysql_data_seek . mysql_db_name . mysql_db_query . mysql_drop_db . mysql_errno . mysql_error . mysql_escape_string . mysql_fetch_array . mysql_fetch_assoc . mysql_fetch_field . mysql_fetch_lengths . mysql_fetch_object . mysql_fetch_row . mysql_field_flags . mysql_field_len . mysql_field_name . mysql_field_seek . mysql_field_table . mysql_field_type . mysql_free_result . mysql_get_client_info . mysql_get_host_info . mysql_get_proto_info . mysql_get_server_info . mysql_info . mysql_insert_id . mysql_list_dbs . mysql_list_fields . mysql_list_processes . mysql_list_tables . mysql_num_fields . mysql_num_rows . mysql_pconnect . mysql_ping . mysql_query ->mysql_real_escape_string . mysql_result . mysql_select_db . mysql_stat . mysql_tablename . mysql_thread_id . mysql_unbuffered_query
|
8.80.50 mysql_real_escape_string()Protège les caractères spéciaux d'une commande SQL[ Exemples avec mysql_real_escape_string ] PHP 4 >= 4.3.0, PHP 5
string
mysql_real_escape_string (
string
unescaped_string
,
resource
link_identifier
)
mysql_real_escape_string
protège les caractères spéciaux
de la chaîne
unescaped_string
, en prenant en compte
le jeu de caractères courant de la connexion
link_identifier
.
Le résultat peut être utilisé sans problème avec la fonction
mysql_query
.
Si des données binaires doivent être insérées, cette fonction doit être utilisée.
mysql_real_escape_string
appelle la fonction
mysql_escape_string
de la bibliothèque MySQL qui ajoute un slashe aux caractères suivants :
NULL
,
\x00
,
\n
,
\r
,
\
,
'
,
"
et
\x1a
.
Cette fonction doit toujours (avec quelques exceptions) être utilisée
pour protéger vos données avant d'envoyer la requête à MySQL.
-
unescaped_string
-
La chaîne à échapper.
-
link_identifier
- La connexion MySQL.
S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction
mysql_connect
sera utilisée. Si une telle connexion
n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si
la fonction
mysql_connect
avait été appelée sans argument.
Si aucune connexion n'est trouvée ou établie, une alerte
E_WARNING
est générée.
Retourne la chaîne échappée, ou
FALSE
si une erreur survient.
| Exemple simple avec mysql_real_escape_string |
<?php // Connexion $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error());
// Requête $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>
|
| Un exemple d'attaque par injection SQL |
<?php // Demande à la base de vérifier si un utilisateur correspond $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; mysql_query($query);
// Nous ne vérifions pas $_POST['password'], il peut contenir ce que l'utilisateur veut ! Par exemple : $_POST['username'] = 'aidan'; $_POST['password'] = "' OR ''='";
// Cela signifie que la requête envoyée à MySQL sera : echo $query; ?>
|
| Meilleure pratique | |
L'utilisation de la fonction
mysql_real_escape_string
sur chaque variable évite les injections SQL. Cet exemple démontre
la méthode la plus propre pour envoyer une requête à la base, indépendamment
de votre configuration des
guillemets magiques .
|
| Note | |
Une connexion MySQL est nécessaire avant d'utiliser la fonction
mysql_real_escape_string
, sinon, une erreur
de niveau
E_WARNING
sera générée, et
FALSE
sera
retourné. Si
link_identifier
n'est pas défini,
la dernière connexion MySQL est utilisée.
|
| Note | |
Si magic_quotes_gpc est activée,
appliquez d'abord la fonction
stripslashes
à vos données.
Utiliser cette fonction sur des données qui ont déjà été protégées,
les protègera une deuxième fois.
|
| Note | |
mysql_real_escape_string
n'échappe ni
%
, ni
_
. Ce sont des jokers en MySQL si
combinés avec
LIKE
,
GRANT
,
ou
REVOKE
.
|
|