我对mysqli_result::free
有疑问。我以为我理解它是如何工作的,但我仍然会遇到错误。
这是代码。我知道它并不完美,但请在回答主要问题后对其中的任何其他缺陷进行评论:
$config = parse_ini_file('../config.ini', true);
$mysqli = new mysqli($config['database']['host'], $config['database']['user'], $config['database']['password'], $config['database']['database']);
if($mysqli->connect_errno > 0) {
die('Unable to connect to database ['. $mysqli->connect_error .']');
}
$sql = 'CALL Stored_Procedure()';
if(!$result = $mysqli->query($sql)) {
die('There was an error running the query ['. $mysqli->error .']');
} else {
$array = $result->fetch_all(MYSQLI_ASSOC);
}
foreach($array as $row) {
//Do something with each row of the result array
}
$result->free();
$sql = 'CALL Other_Stored_Procedure()';
if(!$result = $mysqli->query($sql)) {
die('There was an error running the query ['. $mysqli->error .']');
} else {
$array = $result->fetch_all(MYSQLI_ASSOC);
}
foreach($array as $row) {
//Do something with each row of the result array
}
$result->free();
$mysqli->close();
我得到了There was an error running the query [Commands out of sync; you can't run this command now]
错误,即使我已经解除了结果。我知道mysqli_result::free
方法有效,因为当我做这样的事情时
$result->free();
$result->free();
我得到了mysqli_result::free(): Couldn't fetch mysqli_result
我知道我的程序每个只返回一个结果。
所以主要问题是: 为什么我得到"命令不同步"错误吗
当我调用返回多个结果的过程时,我也有类似的问题。然后我不得不使用mysqli::next_result
方法一次额外的时间来进行进一步的查询。如果有人也知道这个问题的答案,我将不胜感激。
[补充]
好的,所以在评论和更多测试中进行头脑风暴后我会有更多的知识。我注意到的是,与此过程中的代码相比,存储过程会返回一个额外的结果。我通过mysqli::multi_query
执行查询来检查它。最后(在我的示例中)结果mysqli::more_results
返回true
,但下一个结果为空。有人知道为什么吗?
[/补充]