【问题标题】:Wierd and Annoying error: Call to undefined function mysql_query() [duplicate]奇怪而烦人的错误:调用未定义的函数 mysql_query() [重复]
【发布时间】:2016-05-03 17:27:27
【问题描述】:

我已经在这里工作了一个多小时,我可以连接到我的数据库和所有(没有给出任何错误)但是当我尝试使用时出现以下错误 "mysql_query($query);"

Call to undefined function mysql_query()

我已经尝试过启用:

extension=php_mysql.dll
extension=php_mysqli.dll

我已经添加了:

extension_dir = "ext"
extension=php_mysql.dll

在导入列表的末尾。

在我所做的每一次更改之间,我都重新启动了exampp 中的所有进程,并且在我单独尝试的每一个解决方案之后,它仍然会出现这个烦人的错误。

我已经尝试在网上查找,但与我类似的唯一错误是:

Call to undefined function mysql_connect()

我从来没有遇到过任何问题,从未见过。

我在这里问它是因为我在谷歌搜索结果中收到了上述问题的垃圾邮件;不是我拥有的那个。

如果有人可以帮助我,我将非常感激,我在网上找到的教程显示了与我编写的完全相同的代码。

【问题讨论】:

  • 旧的、已弃用的 mysql_* 扩展在 PHP7 中正式失效
  • 确实,您应该使用 PDO 或 mysqli 来代替准备好的语句。

标签: php mysql undefined mysql-connect


【解决方案1】:

PHP 7 已经摆脱了mysql_query(),因为它在很多方面都存在问题! API 不鼓励好的实践,官方的说法是它没有维护,没有准备好的声明!?!它本质上是 PHP 中最大的问题,它鼓励导致 sql 注入的不良做法,这是一个重大的严重不良情况。

但是,我确实使用遗留代码库,因此在某些情况下我必须处理与您相同的情况。如果您的代码库很小,只需更新您的数据库连接方法。如果您的代码库很大,我建议您这样做:

  • 将此代码库的 php 版本回滚到 php 5.6,它将在 2016 年更多时间得到支持。
  • 花点时间更新到 PDO(您可以创建一个 包装 PDO 以使其不那么冗长并且仍然允许准备 查询)。
  • 忽略 mysqli。如果从 mysql_* 升级需要 5 分钟,那么您可能做错了,并且让自己对 sql-injection 开放。只需使用 PDO 并开始使用准备好的查询,这样您就可以在晚上睡觉了。
  • 如果您仍想在更现代的项目中使用 php 7,请使用旧的 php 5.6 遗留代码库启动一个容器实例。

【讨论】:

    【解决方案2】:

    答案很简单,此信息早在 PHP 7 发布之前就有 been available。它已被删除,他们建议移至 mysqliPDO。有关迁移需要了解的更改的完整列表,请参阅 this 指南。


    您的选择:

    • Adjust你的代码到mysqli,这完全一样,只是有点不同。这不会花费很长时间来调整您的代码。
    • 切换到 PDO,完全不同,但更灵活,并且符合我的偏好。
    • mysql_* 已被删除,这意味着它们可以重新定义。您可以创建引用 MySqliPDO 的包装函数。
    • 切换回 PHP 版本 6。

    为什么被删除了?

    • 尚未开发。
    • mysql_* 函数仅提供 MySQL 真正必须提供的功能的一部分。 (想想事务、准备好的语句、异步查询等)
    • 人们仍在使用这些功能编写(即使在今天)不安全的代码。

    我并不是说使用 MySqli 或 PDO 会神奇地阻止 MySQL 注入,但至少它们提供了针对此类攻击的本机支持。剩下的由你决定;程序员,以确保将数据指向需要去的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 2017-01-22
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2012-10-23
      • 2019-05-09
      相关资源
      最近更新 更多