【发布时间】: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