PHP:为 2 个不同的 DB 创建 2 个 PDO,一个阻塞第二个
PHP: creating 2 PDOs for 2 different DBs, one blocks the second one
我有 2 个数据库: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 个不同的数据库?
请问我的错误在哪里?
尝试这种方式,这是您真正需要的唯一断点try...catch
:
// MySQL
try {
$sql = new PDO($pdo_servername, $username, $password, $pdo_options);
} catch (PDOException $e) {
echo 'MySQL connection failed: ' . "<br>" . $e->getMessage();
$sql = false;
}
// SQLite
try {
$sqlite = new PDO($pdo_servername_sqlite3);
} catch (PDOException $e) {
echo 'SQLite connection failed: '. "<br>" . $e->getMessage();
$sqlite = false;
}
if ($sql != false) {
$ret = $sql->exec($query);
if(!$ret){
echo $sql->lastErrorMsg();
} else {
echo "New record created successfully on MySQL DB";
}
$sql->close();
}
if ($sqlite != false) {
$retlite = $sqlite->exec($query);
if(!$retlite){
echo $sqlite->lastErrorMsg();
} else {
echo "New record created successfully on SQLite3 DB";
}
$sqlite->close();
}
首先我要感谢所有在这里贡献的人:)
我想 post 最终的工作代码,因为有些行,也应该改变,尊重上面的代码。
事实上,PDO 方法 lastErrorMsg();
似乎不存在,对于 PDO method close();
也是如此。应该使用 errorInfo()
代替 lastErrorMsg();
并且它是一个数组。在关闭数据库连接时:我在 Whosebug 上的某个地方读到,当脚本执行结束时,PDO 会自动将其关闭,或者您需要销毁分配一个 null
.
的对象
因为@Alex 建议的代码经过这些小的更改后终于可以正常工作,所以我能够从 PHP 中得到错误,突出显示上述详细信息。
请在下面找到最终的工作代码,希望对其他有同样问题的人有用:
/**
* MySQL - try to open it. If it fails,
* it returns which error and continues the execution of the script
*/
try {
$sql = new PDO($pdo_servername, $username, $password, $pdo_options);
} catch (PDOException $e) {
echo 'MySQL connection failed: ' . "<br>" . $e->getMessage();
$sql = false;
}
/**
* SQLite - try to open it. If it fails,
* it returns which error and continues the execution of the script
*/
try {
$sqlite = new PDO($pdo_servername_sqlite3);
} catch (PDOException $e) {
echo 'SQLite connection failed: '. "<br>" . $e->getMessage();
$sqlite = false;
}
/**
* If the connection is made, it executes the Query
* If anything wrong with the Query insertion, an error is returned.
* The script continues
*/
if ($sql != false) {
$ret = $sql->exec($query);
if(!$ret){
print_r($sql->errorInfo()); // THIS is the valid method for PDO Exec and returns an array
} else {
echo "New record created successfully on MySQL DB";
}
}
if ($sqlite != false) {
$retlite = $sqlite->exec($query);
if(!$retlite){
print_r($sqlite->errorInfo()); // THIS is the valid method for PDO Exec and returns an array
} else {
echo "New record created successfully on SQLite3 DB";
}
}
/**
* Closes the DB Connections
*/
$sql = null;
$sqlite = null;
感谢大家的有效帮助。我非常感激:)
我有 2 个数据库: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 个不同的数据库? 请问我的错误在哪里?
尝试这种方式,这是您真正需要的唯一断点try...catch
:
// MySQL
try {
$sql = new PDO($pdo_servername, $username, $password, $pdo_options);
} catch (PDOException $e) {
echo 'MySQL connection failed: ' . "<br>" . $e->getMessage();
$sql = false;
}
// SQLite
try {
$sqlite = new PDO($pdo_servername_sqlite3);
} catch (PDOException $e) {
echo 'SQLite connection failed: '. "<br>" . $e->getMessage();
$sqlite = false;
}
if ($sql != false) {
$ret = $sql->exec($query);
if(!$ret){
echo $sql->lastErrorMsg();
} else {
echo "New record created successfully on MySQL DB";
}
$sql->close();
}
if ($sqlite != false) {
$retlite = $sqlite->exec($query);
if(!$retlite){
echo $sqlite->lastErrorMsg();
} else {
echo "New record created successfully on SQLite3 DB";
}
$sqlite->close();
}
首先我要感谢所有在这里贡献的人:)
我想 post 最终的工作代码,因为有些行,也应该改变,尊重上面的代码。
事实上,PDO 方法 lastErrorMsg();
似乎不存在,对于 PDO method close();
也是如此。应该使用 errorInfo()
代替 lastErrorMsg();
并且它是一个数组。在关闭数据库连接时:我在 Whosebug 上的某个地方读到,当脚本执行结束时,PDO 会自动将其关闭,或者您需要销毁分配一个 null
.
因为@Alex 建议的代码经过这些小的更改后终于可以正常工作,所以我能够从 PHP 中得到错误,突出显示上述详细信息。 请在下面找到最终的工作代码,希望对其他有同样问题的人有用:
/**
* MySQL - try to open it. If it fails,
* it returns which error and continues the execution of the script
*/
try {
$sql = new PDO($pdo_servername, $username, $password, $pdo_options);
} catch (PDOException $e) {
echo 'MySQL connection failed: ' . "<br>" . $e->getMessage();
$sql = false;
}
/**
* SQLite - try to open it. If it fails,
* it returns which error and continues the execution of the script
*/
try {
$sqlite = new PDO($pdo_servername_sqlite3);
} catch (PDOException $e) {
echo 'SQLite connection failed: '. "<br>" . $e->getMessage();
$sqlite = false;
}
/**
* If the connection is made, it executes the Query
* If anything wrong with the Query insertion, an error is returned.
* The script continues
*/
if ($sql != false) {
$ret = $sql->exec($query);
if(!$ret){
print_r($sql->errorInfo()); // THIS is the valid method for PDO Exec and returns an array
} else {
echo "New record created successfully on MySQL DB";
}
}
if ($sqlite != false) {
$retlite = $sqlite->exec($query);
if(!$retlite){
print_r($sqlite->errorInfo()); // THIS is the valid method for PDO Exec and returns an array
} else {
echo "New record created successfully on SQLite3 DB";
}
}
/**
* Closes the DB Connections
*/
$sql = null;
$sqlite = null;
感谢大家的有效帮助。我非常感激:)