当前位置: 首页 > 知识库问答 >
问题:

为什么不推荐使用PHP的mysql_函数?[副本]

通啸
2023-03-14

我们都知道以错误的方式使用mysql_函数可能会非常危险,它会使您的网站易受攻击,等等。但是正确使用这些函数可以防止SQL注入,并且实际上比更新的PDO函数更快一些。

考虑到所有这些,为什么mysql_函数不推荐使用呢?

共有1个答案

柴正祥
2023-03-14

mysql扩展是古老的,从15年前发布的PHP2.0(!!)开始就存在了(!!);这与现代PHP完全不同,现代PHP试图摆脱其过去的不良实践。mysql扩展是到mysql的一个非常原始的低级连接器,它缺少许多方便的特性,因此很难以安全的方式正确应用;因此这对Noobs不利。许多开发人员不了解SQL注入,而且mysql API非常脆弱,即使您意识到它,也很难防止它。它充满全局状态(例如,隐式连接传递),这使得编写难以维护的代码变得容易。由于它已经很旧了,在PHP核心级别维护它可能会有不合理的困难。

mysqli扩展更新了很多,修复了上述所有问题。PDO也是相当新的,它可以解决所有这些问题,还有更多的问题。

由于这些原因*mysql扩展将在将来某个时候被删除。它在全盛时期做了它的工作,相当糟糕,但它做到了。随着时间的推移,最佳实践不断发展,应用程序变得越来越复杂,需要更现代化的API。mysql即将退役,请接受它吧。

考虑到所有这些,除了惯性,没有理由继续使用它。

*这些都是我的常识总结理由;关于整个官方故事,请查看以下内容:https://wiki.php.net/rfc/mysql_deprecation

该文档中的精选引用如下:

文档团队正在讨论数据库安全状况,教育用户远离常用的Ext/MySQL扩展是其中的一部分。

这是一个很好的例子

离开Ext/MySQL不仅涉及安全性,而且涉及访问MySQL数据库的所有功能。

这是一个很好的例子

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 为什么我不应该在PHP中使用mysql_ *函数? (15个答案) 6年前关闭。 不久前我停止使用这些功能时,在这里扮演了Devil’s Advocate的角色,但问题是真实的,可能对许多SO用户来说很重要。 我们都知道以错误的方式使用功能可能非常危险,可能使您的网站容易受到攻击等。但是正确使用这些功能可以防止SQL注入,并且实际上比新的PDO功能要快一

  • 问题内容: 为什么不应该使用函数的技术原因是什么?(例如,或)? 为什么我要使用其他东西,即使它们在我的网站上工作? 如果它们在我的网站上不起作用,为什么我会收到类似的错误 警告:mysql_connect():没有那个文件或目录 问题答案: MySQL 扩展: 未在积极开发中 被正式弃用的PHP 5.5(发布2013年6月)。 自 PHP 7.0起 已完全删除 (2015 年 12 月发布) 这

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 为什么不应该使用功能的技术原因是什么?(例如,或)? 即使我的网站上可以工作,我为什么还要使用其他东西? 如果它们在我的网站上不起作用,为什么会出现类似 警告:mysql_connect():没有这样的文件或目录 问题答案: MySQL扩展: 没有积极发展 被 正式 弃用

  • 问题内容: 众所周知,Java 中的接口已损坏。造成这种情况的原因很多,我将不再赘述。其他人已经做到了。这也是Java架构师本身的立场。 因此,我的问题是:为什么还不被弃用?如果核心Java团队已确定它已损坏,那么他们还必须考虑过时。他们反对这样做的原因是什么(在Java 8中仍不建议弃用)? 问题答案: 有一个错误在1997年提交给Java的错误数据库有关添加方法,所以将不再是无用的。它以“无法

  • 问题内容: 我曾经在hibernate 3中使用getHibernateTemplate(),现在我转向了Hibernate 4,在这里我找不到以下类: 在这里我已经阅读过有关它的更多信息,不建议使用 http://forum.springsource.org/showthread.php?117227-Missing-Hibernate- Classes-Interfaces-in-spring

  • 问题内容: 我正在将hibernate项目配置为使用第二级缓存提供程序,以便可以利用查询缓存。 我向ehcache添加了一个依赖项: 我认为我要使用的提供程序类是: 在eclipse中查看引用的库时,我在和上都看到了注释。是什么赋予了?我可以使用最新的替代供应商吗? 我正在使用hibernate版本3.4.0.GA,以防万一。 问题答案: 是什么赋予了?我可以使用最新的替代供应商吗? 不推荐使用它