与PDO的多个数据库连接

时间:2015-12-28 23:43:51

标签: php mysql pdo

我正在尝试同时连接到多个数据库并遇到问题。此查询适用于我的本地站点。 (它没有用户名或密码,因此是“root,root。”)

$dsn = "mysql:host=localhost;dbname=gbase;charset=utf8";
 $opt = array(
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
 );

 $pdo = new PDO($dsn,'root','root', $opt);

我使用this discussion作为创建多数据库查询的指南。我用以下代码替换了上面的所有代码:

try {
 $db1 = new PDO('mysql:dbname=gbase;host=localhost', 'root', 'root');
 $db2 = new PDO('mysql:dbname=glife;host=localhost', 'root', 'root');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

但我收到这些错误消息:

注意:未定义变量:第164行/Applications/MAMP/htdocs/gx/index.php中的pdo

致命错误:在第164行的/Applications/MAMP/htdocs/gx/index.php中调用null上的成员函数prepare()

这是第64行:

$stm = $pdo->prepare("SELECT A.Site, A.URL, A.Title, A.Article
 FROM 1_about A

我怀疑我需要以某种方式将我的新代码与原始代码集成,而不是简单地替换它。但是,我不明白发生了什么。有人能告诉我编写多数据库查询的正确方法吗?

编辑:以下是我正在使用的完整代码。

try {
 $db1 = new PDO('mysql:dbname=geobase;host=localhost', 'root', 'root');
 $db2 = new PDO('mysql:dbname=geolife;host=localhost', 'root', 'root');
} catch (PDOException $ex) {
 echo 'Connection failed: ' . $ex->getMessage();
}

$stm = $pdo->prepare("SELECT A.Site, A.URL, A.Title, A.Article
 FROM 1_about A
 WHERE A.Site = 'g1' AND A.URL = 'webranger'");
$stm->execute(array(
 // 'MyURL'=>'%'.$MyURL.'%'
));

while ($row = $stm->fetch())
{
 $Article = $row['Article'];
}

echo $Article;

1 个答案:

答案 0 :(得分:2)

您尝试从未定义的对象调用函数。在您的情况下,您在$db1$db2上创建了两个PDO实例。

下面的几行,您尝试从名为prepare的变量调用$pdo函数。但是在您向我们展示的代码中,$pdo变量并不存在。

因此,您需要做的是更改$pdo变量或$db1变量的$db2变量。取决于您要使用的连接。像这样:

$stm = $db1->prepare("SELECT A.Site, A.URL, A.Title, A.Article
 FROM 1_about A
 WHERE A.Site = 'g1' AND A.URL = 'webranger'");

就是这样! :d