为PDO和mysql_xxx使用一个数据库连接

时间:2013-08-21 06:43:08

标签: php mysql pdo database-connection

我在网站上使用PDO,现在我需要一个使用mysql_xxx函数的php类。 它没有连接并选择db本身,你应该像这样使用它:

    if (!($connection = @mysql_connect($MySQL_host, $MySQL_user, $MySQL_pass))) {
        die('Error connecting to the database!');        }
    if (!@mysql_select_db($MySQL_database, $connection)) {
        die('Error selecting database!');                }

    require '../Zebra_Mptt.php';
    $mptt = new Zebra_Mptt();
    $foo = $mptt->add(0, 'Foo');

我可以在PDO和mysql_函数之间创建和共享连接,还是更有效率?

2 个答案:

答案 0 :(得分:1)

你做不到。您必须为此创建两个单独的连接。 但您也可以更改该类以使用PDO或查找另一个类。

答案 1 :(得分:0)

  

我可以在PDO和mysql_函数之间创建和共享连接

不,PHP没有这样的功能。

  

还是更高效的?

不确定。有效的方法是program against interfacesZebra_Mptt库应该为它使用的数据库适配器定义一个接口,以便您可以将其替换为重用数据库连接的接口。

由于目前没有,您需要重构它,将数据库交互调用封装到该库的标准数据库连接对象中,然后提取该连接对象的接口,然后创建您的PDO变体并将其注入

我只是简单地看一下,课程相当直接,所以这应该只是直截了当。它所做的只是解决一些SQL查询,并在一开始就检查数据库是否在线,您可以轻松地映射和推迟。

如果您不想这样做,可以为mysql_*接口创建一个预先存在的包装器,替换现有库中的前缀,或者只是禁用mysql扩展,然后让它创建基于PDO的功能。这样的包装器在这里:

用法:

<?php
require('/path/to/mysqlpdo.php');

mysqlpdo::createfunctions('mysql');

它需要一个额外的mysql_ping()mysql_real_escape_string()包装以使其工作,但这应该很容易实现,但在该领域没有什么是完美的。