一尘不染

为什么不推荐使用PHP的mysql_函数?

mysql

不久前我停止使用这些功能时,在这里扮演了Devil’s Advocate的角色,但问题是真实的,可能对许多SO用户来说很重要。

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

牢记所有这些,为什么mysql_不推荐使用这些功能?


阅读 271

收藏
2020-05-17

共1个答案

一尘不染

mysql扩展很古老,自15年前发布(PHP)以来一直存在(!!);与现代PHP试图摆脱过去的不良做法相比,它绝对是另一种野兽。mysql扩展是MySQL的非常原始的低级连接器,它缺少许多便利功能,因此很难以安全的方式
正确 应用。因此对菜鸟不利。许多开发人员不了解SQL注入,并且mysql
API十分脆弱,即使您知道它,也很难阻止它。它充满了全局状态(例如,通过了隐式连接),这使得编写难以维护的代码变得容易。由于它已经很旧了,因此在PHP核心级别上可能难以合理地维护。

mysqli扩展很新,可以解决上述所有问题。PDO还是相当新的,并且还解决了所有这些问题,以及更多其他问题。

由于这些原因*,将来会在某个时候删除mysql扩展名。它在鼎盛时期做了自己的工作,相当糟糕,但是做到了。时间在流逝,最佳实践在发展,应用程序变得更加复杂,需要更现代的API。mysql已经退休了,请继续使用。

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


*这些是我的常识性总结原因;有关整个官方故事,请看这里:https : //wiki.php.net/rfc/mysql_deprecation

该文档中的选择语录如下:

文档团队正在讨论数据库安全状况,并且教育用户摆脱常用的ext / mysql扩展是其中的一部分。

离开ext / mysql不仅关系到安全性,而且关系到可以访问MySQL数据库的所有功能。

ext / mysql很难维护代码。它并没有获得新功能。保持最新以使用新版本的libmysql或mysqlnd版本是可行的,我们可能会花更多的时间。

2020-05-17