【发布时间】:2014-10-13 19:35:18
【问题描述】:
我有一些代码使用Mysqli::multi_query 从平面.sql 文件中删除和重建开发数据库。重建 mysqli 连接后关闭,然后代码使用PDO 重新连接到该数据库以对其运行查询。
/* Drop and Rebuild DB using mysqli::multi_query */
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) {
die('Failed to connect to MySQL: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$query = file_get_contents("DROPandREBUILD.sql");
if (!$mysqli->multi_query($query))
die("Failed to refresh db: $this->target_db");
$mysqli->close();
/* Execute queries against rebuilt database using PDO */
try {
$sth = new PDO("mysql:host=$host;dbname=$db", $user, $ass);
$test1 = $sth->query("SELECT * FROM tbl");
var_dump($sth->errorInfo());
$test2 = $sth->query("SHOW COLUMNS FROM tbl");
var_dump($sth->errorInfo());
}
catch(PDOException $e) {
die($e->getMessage());
}
第一个var_dump ($test1) 的输出:
array(3) {
[0]=>string(5) "00000"
[1]=>NULL
[2]=>NULL
}
object(PDOStatement)#3 (1) {
["queryString"]=>string(31) "SELECT * FROM tbl"
}
第二个 var_dump ($test2) 的输出:
array(3) {
[0]=>string(5) "42S02"
[1]=>int(1146)
[2]=>string(45) "Table 'db.tbl' doesn't exist"
}
bool(false)
为什么来自$test2 的查询会失败?如果我删除 mysqli 代码块,那么一切都会完美运行。两个查询都针对同一个 tbl 在同一个 db 中运行。是否发生了异步的事情,如果是这样,我如何强制我的脚本在实例化PDO 之前等待mysqli::multi_query 完成执行?
【问题讨论】:
-
@KevinLabécot - 如果我更改它,我会得到与
$test1->errorInfo()相同的结果。$test2->errorInfo()产生Call to a member function errorInfo() on a non-object