我正在使用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版。
答案 0 :(得分:18)
更新,mysql_
已deprecated since 5.5:
在PHP 7中删除自PHP 5.5以来,不推荐使用mysql扩展。应该使用mysqli或PDO扩展名。弃权已在mysql_deprecation中决定,可以找到有关此决定背后原因的讨论。
和 。
mysql_real_escape_string()
是MySQL function "batch"的标准部分,如果正确加载扩展程序,则应始终有效。
是否有其他mysql_
功能有效? (它不应该)
确保您在php.ini
:
extension=mysql.so
使用mysqli
或PDO
代替(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。