12

我正在使用 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 版。

4

5 回答 5

19

评论中提到的更新自 5.5 起mysql_已被弃用:

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

在 PHP 7 中删除


mysql_real_escape_string()MySQL 函数 "batch"的标准部分,如果正确加载了扩展,它应该始终工作。

有没有其他mysql_功能起作用?(不应该)

确保您在以下代码中未注释此行php.ini

extension=mysql.so

此外,明智的做法是使用mysqliPDO代替(mysql_已弃用),它们都可以为您处理逃生问题。

于 2012-12-13T09:24:07.340 回答
7

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

于 2018-04-02T10:14:00.980 回答
1

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

sudo apt-get install php5-mysql

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

于 2015-07-24T08:49:05.690 回答
0

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

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

于 2012-12-13T09:32:41.407 回答
0

自 PHP 5.5 起不推荐使用 MySQL 扩展。因此 mysql_real_escape_string() 在 PHP 7 中不可用。这意味着用户输入无法正确转义,并使代码容易受到 SQL 注入攻击。

PHP 官方的解决方案是将 ext/mysql 替换为 MySQLi、PDO或其他支持的数据库扩展。

为防止 SQL 注入攻击,建议在与数据库对话时使用准备好的语句和参数化查询。

于 2016-02-21T13:15:53.700 回答