2

是否可以使用 PHP 5.3/ADODB5/SQL Server 2008 在同一服务器上打开与两个模式的连接?这是我正在尝试的:

//  Connect to users database
$connUsers = NewADOConnection('mssql');
$connUsers-> Connect($server, $user, $password, $dbNameUsers);
$connUsers->SetFetchMode(ADODB_FETCH_ASSOC);    

//  Connect to main database    
$conn = NewADOConnection('mssql');
$conn-> Connect($server, $user, $password, $dbNameMain);
$conn->SetFetchMode(ADODB_FETCH_ASSOC); 

任何一个都单独工作,但如果两者同时打开,查询将失败。请注意,除了数据库名称之外,所有内容都相同。

我看过的几个地方说您可以在第二个连接字符串中省略服务器名称,如下所示:

$conn-> Connect(false, $user, $password, $dbNameMain);

但这给了我错误(针对 $conn 打开的记录集不是有效对象)。

我可以根据需要打开和关闭不同的连接,但为了可维护性,我肯定想将所有连接设置在脚本的顶部,然后在底部关闭它们。

谢谢你的帮助。

4

2 回答 2

1

这是我制作的一个快速类,它应该允许您使用 adoDB 连接到 3 个数据库:

class Data {
    private static $_dbOne = null;
    private static $_dbTwo = null;
    private static $_dbThree = null;

    protected function __construct() {
    }

    /**
     * This function returns the database connection object
     * @return Object Database Connection
     */
    public static function dbOne() {
        include_once(LIBRARY_PATH.'adodb5/adodb.inc.php');
        if (null === self::$_dbOne) {


            $_connOne = 'mysql://username:password@www.server.com/database';

            self::$_dbOne = &ADONewConnection($_connOne);
            if (self::$_dbOne==false) { die('Could not connect to the database.'); }

        }

        return self::$_dbOne;
    }

    /**
     * This function returns the database connection object
     * @return Object Database Connection
     */
    public static function dbTwo() {
        include_once(LIBRARY_PATH.'adodb5/adodb.inc.php');
        if (null === self::$_dbTwo) {


            $_connTwo = 'mysql://username:password@www.server.com/database';

            self::$_dbTwo = &ADONewConnection($_connTwo);
            if (self::$_dbTwo==false) { die('Could not connect to the database.'); }

        }

        return self::$_dbTwo;
    }

}

    /**
     * This function returns the database connection object
     * @return Object Database Connection
     */
    public static function dbThree() {
        include_once(LIBRARY_PATH.'adodb5/adodb.inc.php');
        if (null === self::$_dbThree) {


            $_connThree = 'mysql://username:password@www.server.com/database';

            self::$_dbThree = &ADONewConnection($_connThree);
            if (self::$_dbThree==false) { die('Could not connect to the database.'); }

        }

        return self::$_dbThree;
    }

}

以下是如何使用此类的示例:

$sql = "SELECT * FROM *";
$results1 = Data::dbOne()->Execute($sql);
$results2 = Data::dbTwo()->Execute($sql);
$results3 = Data::dbThree()->Execute($sql);
于 2013-04-04T17:08:31.457 回答
0

我找到了这个http://phplens.com/lens/adodb/docs-adodb.htm#ex6(它们通过引用初始化 AdoConnection)。我希望它应该有所帮助。

于 2013-03-27T22:44:39.737 回答