我有两个DB:MySQL中有1个,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? 请问我的错误在哪里?
答案 0 :(得分:1)
尝试这种方式,这是您真正需要的唯一断点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();
}
答案 1 :(得分:0)
首先,我要感谢所有在这里贡献的人:)
我想发布确定的工作代码,因为某些行,也应该更改,尊重上面的代码。
事实上,PDO方法lastErrorMsg();
似乎不存在,PDO method close();
也是如此。应该使用errorInfo()
来代替lastErrorMsg();
并且它{&1;}一个数组。在关闭数据库连接时:我在Stackoverflow上的某处读到,当脚本执行结束时,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;
感谢大家的有效帮助。我非常感激:)