3

根据PHP 手册,以及从 PHP 5.5.x 开始在 Internet 上的许多资源,整个原始 MySQL 扩展已被弃用。我有一个非常强大的 Web 应用程序,我的协会中的很多学生都在使用它,但是当我对 PHP 不太了解时,我开始研究它,而且我从来没有为使用 MySQLi_* 或 PDO_MySQL 更改 MySQL_* 扩展而烦恼.

Web 应用程序已完成,所有系统都在运行,并且可能不会使用新功能进行增强,所以我的问题是:我是否应该花一些时间来更改所有 mysql_* 调用并用 mysqli_* 调用切换它们。如果我将所有内容都保留为已弃用的 mysql_* 扩展名,我的应用程序是否会在 Internet 上无法访问?

4

5 回答 5

3

如果我将所有内容都保留为已弃用的 mysql_* 扩展名,我的应用程序是否会在 Internet 上无法访问?

只有当运行它的服务器升级到不支持旧 API 的 PHP 版本时,您的应用程序才会中断。如果您的服务器没有升级到 PHP 5.5,那么您的应用程序将无限期地继续运行。在这方面,外部互联网上的任何其他内容都不会影响它;只有升级到您自己的服务器是相关的。

目前,php 5.4 仍然受到积极支持,因此您可以愉快地继续使用该版本,而无需担心您的代码会突然中断。

但是,在将来的某个时候,出于某种原因,您将需要升级到 PHP 5.5 或更高版本。PHP 5.4 将终止使用,建议迁移到 5.5。或者,如果您使用的是共享主机帐户,您甚至可能无法选择您的 PHP 版本。所以是的,您应该期望您当前的代码不适用于您当时使用的 PHP 版本。最终。

因此,虽然没有立即进行转换的紧迫性,但您应该考虑尽快这样做。您想要的一件事是当事情破裂的那一天到来时,您会发现自己陷入困境。

5.5 刚刚发布,因此您可能需要几年时间才能成为可用的最低版本,但请接受我的建议;你不想等到最后一刻。

我是否应该花一些时间来更改所有 mysql_* 调用并用 mysqli_* 调用切换它们。

您说您的应用程序“非常强大”并且“可能不会得到增强”。所以它基本上处于一个仅长期维护的阶段。

鉴于这些标准,我会说是的,简单地切换到mysqlilib 是明智之举。所需的更改相当微不足道(听起来您已经掌握了要做什么),并且对软件的其余部分几乎没有任何影响。

如果您的代码确实健壮且编写良好,那么您将对其进行结构化,以便有某种数据库层,这意味着您无论如何都没有太多事情要做。

如果它的结构不是很好,它可能有很多mysql_query()分散在代码周围的调用,在这种情况下,它可能需要更多的工作。在这种情况下,由于您无论如何都在处理代码,您可能会考虑花时间进行一些重组。创建数据库层。也许开始使用准备好的语句。我还建议切换到 PDO 而不是mysqli. 但是你的电话——鉴于你在问题中所说的,如果你想做尽可能少的工作是可以理解的。

顺便说一句 - 如果您还没有这样做,您可能还想阅读以下内容:为什么我不应该在 PHP 中使用 mysql_* 函数?

于 2013-08-19T13:09:48.837 回答
1

是的,只要您的虚拟主机升级到删除扩展的 PHP 版本,应用程序就无法访问。请注意,这不会发生在 PHP 5.5 中,其中扩展“仅”标记为已弃用。删除扩展程序的确切时间是 afaik unknown atm。

关于升级问题:这真的取决于,您是否希望您的应用程序超过 mysql_*?您的网络主机是否经常更新 PHP?如果它们的更新速度很慢,您可能可以运行该应用程序数年。

性能/安全方面,最好更改为准备好的语句。

于 2013-08-19T12:43:35.433 回答
1

我是否应该花一些时间来更改所有 mysql_* 调用并用 mysqli_* 调用切换它们。

不,不,不。

  • 如果您想让您的应用程序更好,请熟悉某种ORM查询构建器,或者至少熟悉 DAL,如PDOsafeMysql
  • 如果您想让您的应用程序继续运行 - 请保持原样。您的服务器上还没有 5.5,是吗?获得它后,您将能够关闭已弃用级别的通知。不是最好的方法,但便宜且可用。

虽然机械地将 mysql 更改为 mysqli 调用将没有好处。

如果我将所有内容都保留为已弃用的 mysql_* 扩展名,我的应用程序是否会在 Internet 上无法访问?

实际上无法在这里得到您的要求,但我会说您至少还有 5 年的时间。

于 2013-08-19T12:45:23.443 回答
1

你应该问自己的问题是

"How long before I am forced to move to a version of PHP that no longer supports mysql_*?"

如果您从不升级您的 PHP,那么您根本不需要更改代码。 (请不要对我大喊大叫)

但是,在未来的某个时间,您将不得不迁移到更新版本的 PHP

您的 ISP 或您的网络管理员会坚持认为您所使用的 PHP 版本太旧且在网络上不安全。

所以诚实的答案是,你不必在星期五之前这样做,但是当那个管理员坚持要删除你的 PHP 版本时,你将不得不在某个时候这样做。所以当你有时间的时候就去做吧。

于 2013-08-19T12:48:29.507 回答
0

是的,您应该费心更新您的代码以使用 mysqli 或 PDO。

原因不仅在于 mysql_* 在未来的 PHP 版本中无法访问。而且在你的安全。

mysql_* 不支持涵盖 sql 保护的准备好的语句/参数化语句。您可以使用 mysql_real_escape_string(),但即使在处理多字节字符时也不是完美无缺的。

另请参阅:https ://security.stackexchange.com/questions/8028/does-mysql-escape-string-have-any-security-vulnerabilities-if-all-tables-using-l 和 https://stackoverflow.com /a/12118602/1209443

于 2013-08-19T12:43:12.207 回答