0

我在网站中使用 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_ 函数之间创建和共享连接还是更有效的方法?

4

2 回答 2

1

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

于 2013-08-21T06:47:12.637 回答
0

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

不,这样的功能在 PHP 中不可用。

或更有效的方法?

当然。有效的方法是 针对接口进行编程。该Zebra_Mptt库应为其使用的数据库适配器定义一个接口,以便您可以将其替换为重用数据库连接的接口。

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

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

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

用法:

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

mysqlpdo::createfunctions('mysql');

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

于 2013-08-21T06:52:20.310 回答