【发布时间】:2015-07-07 09:51:36
【问题描述】:
我有 2 个 DB:1 个在 MySQL,另一个在 SQLite3。
我需要在两者中插入相同的数据。为了通过表单实现这一点,我正在制作一个 PHP 脚本,这有一些问题。 下面是代码,然后是发生了什么的解释:
// MySQL
try {
$sql = new PDO($pdo_servername, $username, $password, $pdo_options);
$sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$ret = $sql->exec($query);
if(!$ret){
echo $sql->lastErrorMsg();
} else {
echo "New record created successfully on MySQL DB";
}
} catch (PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$sql->close();
// SQLite
try {
$sqlite = new PDO($pdo_servername_sqlite3);
$sqlite->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$retlite = $sqlite->exec($query);
if(!$retlite){
echo $sqlite->lastErrorMsg();
} else {
echo "New record created successfully on SQLite3 DB";
}
} catch (PDOException $e) {
echo $sqlite . "<br>" . $e->getMessage();
}
$sqlite->close();
MySQL 工作正常,而 SQLite3 甚至无法启动。 反转块,因此首先是 SQLite3,然后是 MySQL,问题是反转的:SQLite3 工作正常,MySQL 没有启动。 我没有返回任何错误
我也尝试避免任何 try-catch-finally,我只是将代码编写得尽可能简单,我遇到了同样的情况。 是否禁止打开 2 个 PDO 连接到 2 个不同的 DB? 请问我的错在哪里?
【问题讨论】:
-
有趣的问题,也许这个codereview.stackexchange.com/questions/30689/… 和这个stackoverflow.com/questions/10292789/… 会有所帮助。
-
其实更多的是第二个链接的情况。但是在我的情况下,它总是在第一个被调用的数据库中工作。从来没有第二个。为了能够使用第二个,我必须颠倒顺序。我不明白为什么
-
你可以尝试在
->close()之后设置$sql = NULL和$sqlite = NULL吗?因为连接在该PDO对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁该对象 - 您可以通过将NULL分配给保存该对象的变量来执行此操作。如果你没有明确地这样做,PHP 会在你的脚本结束时自动关闭连接。 -
现在就按照您的建议去做了。没有任何变化:-/
-
你为什么要
try...catch?你通常不需要它。这种技术只是对你隐藏一些行为。