我们都知道以错误的方式使用mysql_
函数可能会非常危险,它会使您的网站易受攻击,等等。但是正确使用这些函数可以防止SQL注入,并且实际上比更新的PDO函数更快一些。
考虑到所有这些,为什么mysql_
函数不推荐使用呢?
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扩展: 没有积极发展 被 正式 弃用
问题内容: 我仍然主要从所购买的书中学习,但是今天我提醒我,尽管我今年购买了有关PHP编程的书,但我的书已经过时了。现在,我知道不推荐使用PHP中的mysql_ *命令,而应使用更安全,更稳定的预处理语句和PDO代替它们。因此,我根据自己的意愿重写了所有网络,也许我会需要您一些建议,以帮助他们正确地进行网络建设以及所有经验丰富的人的工作:) 因此,我将在这里仅以主要部分(连接到数据库并选择数据库)
问题内容: 众所周知,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