mysql_real_escape_string未定义

时间:2012-12-13 09:20:42

标签: php mysql ubuntu

我正在使用PHP 5.3版并尝试在我的代码中使用mysql_real_escape_string($unescaped_string),但是我收到错误:

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

但我仍然可以连接到数据库。为什么不可用?

我使用的是PHP 5.3版。

5 个答案:

答案 0 :(得分:18)

comment中提到的

更新mysql_deprecated since 5.5

  

自PHP 5.5以来,不推荐使用mysql扩展。应该使用mysqli或PDO扩展名。弃权已在mysql_deprecation中决定,可以找到有关此决定背后原因的讨论。

在PHP 7中删除


mysql_real_escape_string()MySQL function "batch"的标准部分,如果正确加载扩展程序,则应始终有效。

是否有其他mysql_功能有效? (它不应该)

确保您在php.ini

中取消注释此行
extension=mysql.so

使用mysqliPDO代替(mysql_ is deprecated)也是明智之举,他们都可以为你逃避。

答案 1 :(得分:3)

在我的情况下,我使用了mysqli_real_escape_string而不是mysql_real_escape_string

答案 2 :(得分:1)

有趣的是,在探索了所有其他解决方案后,我意识到问题实际上是由于php5-mysql扩展尚未安装 - 默认情况下它没有安装在新的Ubuntu上,当你安装新的php时。所以,对我来说解决方案变成了:安装php5-mysql扩展:

sudo apt-get install php5-mysql

在此之后,我再次没有得到那些令人讨厌的mysql_ *错误; - )

答案 3 :(得分:0)

也许你的问题存在于php服务器配置(编译)中。

这里有关于mysql_real_escape_string的更多信息: http://www.php.net/manual/en/function.mysql-real-escape-string.php

答案 4 :(得分:0)

自PHP 5.5起,不推荐使用MySQL扩展。因此,mysql_real_escape_string()在PHP 7中不可用。这意味着无法正确转义用户输入并使代码保持开放以进行SQL注入攻击。

PHP官方解决方案是replace ext/mysql with MySQLi, PDO或其他受支持的数据库扩展。

为防止SQL注入攻击,建议在与数据库通信时使用prepared statements and parameterized queries