mysql_query
<<<
mysql_real_escape_string mysql_result
>>>

8.77 MySQL
8 Référence des fonctions
 Manuel PHP

Introduction
Pré-requis
Installation
Configuration à l'exécution
Types de ressources
Constantes pré-définies
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.77.49 mysql_real_escape_string() Protège les caractères spéciaux d'une commande SQL pour MySQL

[ Exemples avec mysql_real_escape_string ]   PHP 4 >= 4.3.0, PHP 5

string  mysql_real_escape_string ( string   unescaped_string , resource   link_identifier )

    unescaped_string
    La chaîne à échapper
    link_identifier (optional)
    La ressource de connexion MySQL

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 .

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));
?>

Cette fonction doit toujours (avec quelques exceptions) être utilisée pour protéger vos données avant d'envoyer la requête à MySQL.

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.

Si cette fonction n'est pas utilisée pour protéger vos données, la requête sera vulnérable aux attaques par injection SQL .

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 quel'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 de guillemets magiques .

Note

mysql_real_escape_string n'échappe ni % , ni _ . Ce sont des jokers en MySQL si combinés avec LIKE , GRANT , ou REVOKE .

Voir aussi mysql_client_encoding , addslashes , stripslashes ainsi que les directives magic_quotes_gpc et magic_quotes_runtime .

<< mysql_real_escape_string >>
mysql_query MySQL mysql_result