web-dev-qa-db-fra.com

mysql_real_escape_string n'est pas défini

J'utilise PHP version 5.3 et j'essaie d'utiliser mysql_real_escape_string($unescaped_string) dans mon code, mais j'obtiens l'erreur suivante:

Fatal error: Call to undefined function mysql_real_escape_string() 
in /var/www/engine/database.php on line 38

Je peux quand même me connecter à la base de données. Pourquoi n'est-il pas disponible?

J'utilise PHP version 5.3.

11
MichaelH

Update comme mentionné dans comment , mysql_ est/ obsolète depuis 5.5 :

L'extension mysql est obsolète depuis PHP 5.5. L'extension mysqli ou PDO doit être utilisée à la place. La désapprobation a été décidée dans mysql_deprecation , où une discussion des raisons de cette décision peut être trouvée.

et supprimé dans PHP 7.


mysql_real_escape_string() est une partie standard de La fonction MySQL "batch" devrait toujours fonctionner si l'extension est chargée correctement.

Est-ce qu'une autre fonction mysql_ fonctionne? (Ça ne devrait pas)

Assurez-vous que cette ligne est commentée dans votre php.ini:

extension=mysql.so

De plus, il serait sage d'utiliser mysqli ou PDO à la place ( mysql_ est obsolète ), ils peuvent tous deux prendre soin de vous échapper.

18
Vyktor

Dans mon cas, j'ai utilisé mysqli_real_escape_string au lieu de mysql_real_escape_string.

2
speksy

Fait intéressant, après avoir exploré toutes les autres solutions ici, j’ai réalisé que le problème était dû au fait que l’extension php5-mysql n’avait pas encore été installée - elle n’est pas installée par défaut sur un nouvel Ubuntu, ni lorsque vous installez un nouveau php. Donc, pour moi, la solution est devenue: installez l'extension php5-mysql:

Sudo apt-get install php5-mysql

Après cela, je n’avais plus ces mauvaises erreurs mysql_ * ;-)

1
nemesisfixx

Peut-être que votre problème réside dans la configuration du serveur php (compilation).

Voici plus d'informations sur mysql_real_escape_string: http://www.php.net/manual/en/function.mysql-real-escape-string.php

0
shinosn

L'extension MySQL est obsolète depuis PHP 5.5. mysql_real_escape_string () n'est donc pas disponible dans PHP 7. Cela signifie que les entrées utilisateur ne peuvent pas être échappées correctement et laisse le code ouvert aux attaques par injection SQL.

La solution officielle de PHP consiste à remplacer ext/mysql par MySQLi, PDO ou une autre extension de base de données prise en charge.

Pour éviter les attaques par injection SQL, il est recommandé d'utiliser les instructions préparées et les requêtes paramétrées lorsque vous parlez à la base de données.

0
Kristoffer Bohmann