奇怪而烦人的错误:调用未定义的函数mysql_query()。

7

我已经做了一个多小时了,我可以连接到我的数据库(没有出现任何错误),但是当我尝试使用"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()

我从未遇到过任何问题,也从未见过它。

我在这里提问是因为我在谷歌搜索结果中被垃圾邮件轰炸了,而且与我遇到的问题无关。

如果有人能帮我解决这个问题,我将不胜感激。我在网上找到的教程显示的代码与我编写的完全相同。

phpInfo: top phpInfo: sql


6
PHP7正式淘汰了旧的、已废弃的mysql_*扩展。 - Mark Baker
实际上,你应该使用PDO或mysqli与预处理语句一起使用。 - Qirel
2个回答

7

PHP 7已经放弃使用mysql_query(),因为它在多个方面存在问题!该API不鼓励良好的实践,官方声明它未得到维护,而且没有预处理语句!?!它本质上是PHP中最大的问题,鼓励了导致SQL注入的坏实践,这是一个严重的大问题。

然而,我也需要与旧代码库打交道,所以在某些情况下必须面对相同的情况。如果您有一个小的代码库,只需更新您的数据库连接方法即可。如果您有一个大型代码库,以下是我的建议:

  • 将此代码库的PHP版本回滚到PHP 5.6,它将得到支持至少到2016年底。
  • 花点时间更新到PDO(您可以创建一个包装器来使其更简洁,并仍然允许准备查询)。
  • 忽略mysqli。如果从mysql_*升级花费您5分钟的时间,则可能做错了事,并且会使自己处于SQL注入的风险之中。只需使用PDO并开始使用准备好的查询,这样您就可以安心睡觉了。
  • 如果您仍想在更现代的项目中使用PHP 7,请在旧的PHP 5.6遗留代码库上启动容器实例。

4
答案很简单,这个信息在PHP 7发布之前就已经可用了。它已被移除,他们建议转移到mysqliPDO。有关迁移需要了解的完整更改列表,请参见this指南。

您的选择:

  • 调整您的代码到mysqli,这与原来相似但有些不同。这不需要花费很长时间来调整您的代码。
  • 切换到PDO,它非常不同,但更加灵活,我更喜欢它。
  • mysql_*已被移除,这意味着它们可以重新定义。您可以创建包装函数,将其引用MySqliPDO
  • 切换回PHP版本6。

为什么要删除它?

  • 它没有在开发中。
  • mysql_*函数仅提供MySQL实际提供的一部分功能。(考虑事务、准备语句、异步查询等)
  • 即使今天,人们仍在使用这些函数编写不安全的代码。

我并不是说使用 MySqli 或 PDO 就可以神奇地防止 MySQL 注入攻击,但至少它们提供了针对这种攻击的本地支持。其余的工作就取决于你——程序员,确保将数据指向其应该到达的位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接