我正在使用 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 版。
自 PHP 5.5 起,mysql 扩展已被弃用。应使用 mysqli 或 PDO 扩展名。已在mysql_deprecation中决定弃用,其中可以找到有关此决定背后原因的讨论。
并在 PHP 7 中删除。
mysql_real_escape_string()
是MySQL 函数 "batch"的标准部分,如果正确加载了扩展,它应该始终工作。
有没有其他mysql_
功能起作用?(不应该)
确保您在以下代码中未注释此行php.ini
:
extension=mysql.so
在我的情况下,我使用mysqli_real_escape_string
而不是mysql_real_escape_string
.
有趣的是,在这里探索了所有其他解决方案之后,我意识到问题实际上是由于php5-mysql
尚未安装扩展程序 - 默认情况下它没有安装在新的 Ubuntu 上,当你安装新的 php 时也没有安装。所以,对我来说,解决方案变成了:安装 php5-mysql 扩展:
sudo apt-get install php5-mysql
在此之后,我没有再遇到那些讨厌的 mysql_* 错误;-)
也许您的问题存在于 php 服务器配置(编译)中。
这里有关 mysql_real_escape_string 的更多信息: http ://www.php.net/manual/en/function.mysql-real-escape-string.php
自 PHP 5.5 起不推荐使用 MySQL 扩展。因此 mysql_real_escape_string() 在 PHP 7 中不可用。这意味着用户输入无法正确转义,并使代码容易受到 SQL 注入攻击。
PHP 官方的解决方案是将 ext/mysql 替换为 MySQLi、PDO或其他支持的数据库扩展。
为防止 SQL 注入攻击,建议在与数据库对话时使用准备好的语句和参数化查询。