【问题标题】:Migration to PHP 5.6: Writing a MySQL wrapper迁移到 PHP 5.6:编写 MySQL 包装器
【发布时间】:2016-05-12 09:13:38
【问题描述】:

我必须将网站迁移到 PHP 5.6。因此,我需要将 PHP 连接 MySQL 的方式从 mysql_-like-type 更改为 PDO 或 mysqli。

有人提议写一个包装器(类),这样老的使用方式

$db = mysql_connect("localhost", "testusr", "secretpass");
mysql_select_db("testdb", $db);

变成

$db = new PDO("mysql:host=localhost;dbname=testdb", "testusr", "secretpass");

除了连接,我只有基本的 SQL 查询,如 INSERT、SELECT 和 DELETE。

是否已经存在将旧的 mysql_ 查询“翻译”为 mysqli 或 PDO 的东西?

它可能看起来像这样:

function mysql_connect_wrapper ($host, $user, $pwd) {
$db = new PDO("mysql:host=localhost;dbname=testdb", "testusr", "secretpass");
return $db;
}

$db = mysql_connect_wrapper("localhost", "testusr", "secretpass");

非常感谢!

【问题讨论】:

  • PDO 基本上是一个包装器(嗯,一个数据库抽象层)——重构代码以使用 PDO 比为包装器编写包装器更容易吗?
  • 在 php 5.6+ 中,你“只是”需要省略 deprecated_warning。这些函数在 php7 中被删除 - [您选择的搜索引擎]为此提供了许多教程如何恢复 mysql_function-set。但在这两种情况下,您都应该直接迁移到 mysqli_ 或 PDO 并采用仅使用 mysql_ 命名的包装器无法使用的新功能。
  • 同样,仅仅用 PDO 调用替换 mysql_* 调用是一个巨大的错失良机,可以利用一个健全的 API 使你的代码健全。
  • @FranzGleichmann:感谢您的评论。是的,将错误警告更改为 error_reporting(E_ALL & ~E_DEPRECATED) 是最简单的解决方案...通过不查看问题来解决问题:-) 但是,它需要再次在 PHP7 中解决。
  • @FranzGleichmann:您说“...[您选择的搜索引擎] 提供了许多如何恢复 mysql_function-set 的教程。”这正是我正在寻找的,但我似乎无法在 [我选择的引擎] 中选择正确的搜索词。你能推荐一些给我吗?

标签: php mysql mysqli pdo php-5.6


【解决方案1】:

我找到了解决办法: Mysql using Mysqli

这正是我想要的。

【讨论】:

  • 这对您有何帮助?该脚本似乎足够好,但我不确定它是否 100%。我有一些客户使用(非常)旧的 PHP 脚本(开发人员已经消失)并且服务器已升级。非常感谢您的经验。
  • 我还没用过这个“Mysql using Mysqli”,因为我们已经从PHP 5.2或5.3升级到了PHP 5.6或5.7,所以mysql扩展还在。升级后您的服务器的 PHP 版本是多少?
  • 正确。它仅适用于 PHP 7 升级。当前升级为 5.6,但 7 现在不会花费太长时间,所以(就像你一样)我想做好准备 ;-) 感谢您的回复。
  • 对我来说也一样... PHP 7 将会到来。但是我对使用 Mysqli Script 的 Mysql 感觉很安全。
  • 我可以帮你升级到 PHP 5.6 吗?
【解决方案2】:

没有这样的自动转换工具。因为不仅要更改 API,还要更改运行查询的方式:不是直接在查询字符串中添加变量,而是必须用 占位符 替换每个变量,而必须移动变量本身进入执行()。作为this is the main and the only important reason why you were deprived from familiar mysql_query()

请注意,PDO 也不是首选方式。您可以考虑使用 ORM 进行数据库交互,并且可能是流行的 框架 的一部分,例如 Laravel。

【讨论】:

  • 我不是在寻找自动转换工具。只为让旧的、复杂的和完美运行的 osCommerce Shop 能够在 PHP 更新后继续存在的简单方法。
  • 然后按照 cmets 中的建议,堵住 E_DEPRECATED 错误。
  • 谢谢,是的,我已阅读此内容。但这不会在迁移到 PHP7 后继续存在。所以我最好避免这种情况。
  • 嗯,那你得先下定决心。在你的位置,我会问自己为什么我会将旧的、复杂且运行完美的 osCommerce Shop 迁移到 PHP7
  • 对我来说,“为什么”的答案是:因为在PHP7中去掉mysql_*-functions后,店铺就不能再工作了,所以必须做点什么。
猜你喜欢
  • 1970-01-01
  • 2015-05-03
  • 2017-12-29
  • 2017-04-11
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多