【问题标题】:mysql_real_escape_string is undefinedmysql_real_escape_string 未定义
【发布时间】:2012-12-13 09:20:42
【问题描述】:

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

【问题讨论】:

  • 请向我们展示您的代码
  • 改用 mysql_escape_string()
  • @jtheman 你为什么建议用更差的功能(只是简单的字符串替换)替换更好的功能(考虑到服务器配置)?
  • 你怎么知道可以获取数据库
  • mysql_real_escape_string()是因为mysql_escape_string()存在漏洞而创建的,强烈建议不要使用!

标签: php mysql ubuntu


【解决方案1】:

更新commentmysql_已经是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),它们都可以为你处理逃生。

【讨论】:

  • 对不起,这个问题是我的错。当我使用 sudo apt-get install php5-mysql 它失败了,我认为我的其他连接语句工作正常。我猜你刚刚得到了一个免费的正确答案。
  • @MichaelH 在想知道您的代码有什么问题之前,需要先检查系统配置(更新后)。
  • MySQL 扩展名是not available since PHP 5.5;请改用 ext/mysqli 或 ext/pdo_mysql。
【解决方案2】:

就我而言,我使用mysqli_real_escape_string 而不是mysql_real_escape_string

【讨论】:

    【解决方案3】:

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

    sudo apt-get install php5-mysql
    

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 任何可用的数据库 API(mysql、mysqli、PDO 等)都具有正确转义值或直接使用数据库的预处理语句 API 的功能(开始时更好的方法)。如果real_escape_string 或等效项不可用,则意味着整个数据库 API 不可用,并且无论如何您都会遇到更大的问题。永远不需要糟糕地重新实现此功能。至关重要的是,您没有实现任何编码问题,这仍然使您可以注入某些多字节编码。
        • @deceze:答案改为关注“不推荐使用 MySQL 扩展”部分。删除了模仿 mysql_real_escape_string() 的函数。
        猜你喜欢
        • 1970-01-01
        • 2012-01-16
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多