当前位置: 首页 > 面试题库 >

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

孟翰藻
2023-03-14
问题内容

这个问题已经在这里有了答案

为什么我不应该在PHP中使用mysql_ *函数? (15个答案)

6年前关闭。

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

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

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


问题答案:

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版本是可行的,我们可能会花更多的时间。



 类似资料:
  • 我们都知道以错误的方式使用函数可能会非常危险,它会使您的网站易受攻击,等等。但是正确使用这些函数可以防止SQL注入,并且实际上比更新的PDO函数更快一些。 考虑到所有这些,为什么函数不推荐使用呢?

  • 问题内容: 我仍然主要从所购买的书中学习,但是今天我提醒我,尽管我今年购买了有关PHP编程的书,但我的书已经过时了。现在,我知道不推荐使用PHP中的mysql_ *命令,而应使用更安全,更稳定的预处理语句和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