web-dev-qa-db-fra.com

Dois-je utiliser mysqli_real_escape string () ou mysql_real_escape_string () pour les données du formulaire?

Duplicata possible:
mysql_escape_string VS mysql_real_escape_string

J'ai besoin de faire entrer company_name (donné par l'utilisateur via un formulaire) dans ma base de données mysql. Quand j'utilise

$company = mysqli_real_escape_string($_POST['company_name'])

Je reçois une erreur

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in     /opt/lampp/htdocs/Abacus-Version-2/admin/Company/insert_company.php on line 58

Mais tout semble bien se passer lors de l'utilisation

$company = mysql_real_escape_string($_POST['company_name'])

Que puis-je faire dans de tels cas?

11
user1629766

Celui à utiliser dépend de si vous utilisez l'extension MySQLi ou l'extension MySQL

// procedural mysqli 
$db = new mysqli; 
$sql = sprintf("INSERT INTO table (id,name,email,comment) VALUES (NULL,'%s','%s','%s')", 
   mysqli_real_escape_string($db,$name), 
   mysqli_real_escape_string($db,$email), 
   mysqli_real_escape_string($db,$comment) ); 

// mysql 
$conn = mysql_connect(); 
$sql = sprintf("INSERT INTO table (id,name,email,comment) VALUES (NULL,'%s','%s','%s')", 
   mysql_real_escape_string($name,$conn), 
   mysql_real_escape_string($email,$conn), 
   mysql_real_escape_string($comment,$conn) );  
12
Anshu

mysql_real_escape_string() est conçu pour sécuriser les données à insérer dans la base de données sans erreurs. (IE comme échapper les barres obliques afin qu'il ne casse pas votre code).

Tu devrais utiliser mysql_ ou mysqli_ fonctions correspondant à votre chaîne de connexion. "mysqli" est l'implémentation orientée objet de l'ensemble de fonctions mysql, donc les fonctions sont appelées dans le style orienté objet. "mysql" est procédural. Je suggère de passer à "mysqli" car je pense qu'il a été question de déprécier les fonctions "mysql" dans les futures versions.

Si votre chaîne de connexion est:

mysql_connect()

puis utilisez:

mysql_real_escape_string($_POST[''])

Si c'est:

$mysqli = new mysqli();

puis utilisez:

$mysqli->real_escape_string($_POST[''])
10
Luke

Définitivement non

Les deux fonctions n'ont rien à voir avec les données du formulaire.
Ils doivent être utilisés pour formater littéraux de chaîne insérés dans la requête SQL niquement.
Cette fonction appartient à la requête SQL et non à quelque forme que ce soit. Et même à une partie très limitée de la requête - un littéral de chaîne.

Ainsi, chaque fois que vous allez insérer dans la requête un littéral de chaîne (franchement, une partie des données entre guillemets), cette fonction doit être utilisée sans condition.
Pour tout autre cas, il ne devrait pas être utilisé du tout.

Quant à l'erreur que vous obtenez - c'est assez explicite: cette fonction attend 2 paramètres, pas un. Passez simplement les paramètres appropriés comme indiqué dans la page de manuel de cette fonction, et tout ira bien

4
Your Common Sense

Les deux variantes sont très bien * (Veuillez consulter ma mise à jour).

Lorsque vous utilisez un mysql_connect, Vous devez vous en tenir à mysql_real_escape_string() et également passer la poignée de connexion.

Lorsque vous utilisez un mysqli_connect, Vous devez vous en tenir à mysqli_real_escape_string().

[~ # ~] mise à jour [~ # ~]

Comme l'a souligné Jeffrey dans les commentaires, l'utilisation des fonctions mysql_ Est [~ # ~] pas [~ # ~] très bien. Je suis d'accord avec ça. Je viens de souligner que vous devez utiliser la fonction utilisée par l'extension MySQL que vous utilisez.

Il m'est venu à l'esprit que ce n'était pas la question de savoir quelle extension MySQL utiliser, mais quelle fonction pour échapper les données.

Si tu me demandes:

  • Utilisez mysqli ou PDO, car mysql n'est pas recommandé et déconseillé.
  • Passez la poignée de connexion à la fonction d'échappement ou mieux
  • utiliser déclarations préparées ( style PDO )
0
Stefan

Comme toute l'extension MySQL est obsolète , il vaut mieux utiliser les méthodes MySQLi à la place, c'est plus à l'épreuve du temps.

0
Oldskool

Cela devrait être le cas si vous utilisez un style procédural:

$city = mysqli_real_escape_string($link, $city);

où le lien est la connexion

ou ceci lorsque vous utilisez un style orienté objet:

$city = $mysqli->real_escape_string($city);

Consultez le manuel php: http://php.net/manual/en/mysqli.real-escape-string.php

0
Perry