【问题标题】:Multiple database connections with PDO与 PDO 的多个数据库连接
【发布时间】:2016-04-02 19:54:02
【问题描述】:

我正在尝试同时连接到多个数据库,但遇到了问题。此查询适用于我的本地站点。 (它没有用户名或密码,因此是“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();
}

但我收到以下错误消息:

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

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

这是第 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;

【问题讨论】:

  • 所以您已将$pdo 分别更改为$db1$db2...改用它们?
  • 是的,其实变量名是错误的。如果只是一个错字,请显示所有代码,或至少显示您创建 PDO 实例并执行查询的部分。
  • 是的,其实变量名是错误的。如果只是一个错字,请显示所有代码,或至少显示您创建 PDO 实例并执行查询的部分。
  • var $pdo 来自哪里?
  • @Vitor Luis - 我编辑了我的帖子,在最后粘贴了完整的代码。 @ Robbie 和 RamRaider - 我不明白在哪里或如何插入 $pdo。用 $pdo 替换 $db1 和 $db2 没有意义(至少对我来说)。

标签: php mysql pdo


【解决方案1】:

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

以下几行,您尝试从名为$pdo 的变量中调用prepare 函数。但是在您向我们展示的代码中,$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

【讨论】:

  • 现在我收到错误“注意:未定义的变量:第 177 行 /Applications/MAMP/htdocs/gx/index.php 中的文章”,但这可能只是我可以修复的一个简单错误。还有一个问题——如果我需要同时从两个不同的数据库中查询表怎么办?例如,假设我想将 Database1 中的表与 Database2 中的表连接起来?
  • 好吧,我以前从未尝试过,但我认为您可以将数据库的名称放在表名的前面,例如:database1.table1database2.table2
  • 好的,有道理。
猜你喜欢
  • 2014-10-31
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 2013-04-22
  • 1970-01-01
  • 2013-05-14
  • 2014-09-02
相关资源
最近更新 更多