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

Gli*_*ire 20 php mysql mysqli pdo

在我不久前停止使用这些功能的时候,玩Devil's Advocate,但这个问题是真实的,可能对很多SO用户很重要.

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

考虑到这一切,为什么这些mysql_功能已被弃用?

dec*_*eze 15

mysql扩展是古老的,自15年前发布的PHP 2.0以来一直存在(!!); 这是一个与现代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版本保持同步是有效的,我们可能会花更多的时间.

  • 没错,mysql本身并不是*不安全的; 安全使用它更加困难*,或者更确切地说*"它不安全地使用它很容易"*.当然,你可以随时使用任何MySQL库进行拍摄. (3认同)
  • 明确一点:从“ext/mysql”迁移到“ext/mysqli”或“ext/pdo”与安全无关。事实上,根据 PHP 版本,`PDO` 可能不如 `ext/mysql` 安全(特别是由于 [在 5.3.6 之前缺乏设置字符集的能力](http://stackoverflow.com/问题/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection/12202218#12202218))。因此,尽管人们经常引用“安全原因”,但这只是一个废话。是的,准备好的语句更好。但这并不意味着“ext/mysql”在正确使用时不安全...... (2认同)