PHP命令不同步错误 [英] PHP Commands Out of Sync error
问题描述
我正在PHP/MySQLi中使用两个准备好的语句从mysql数据库中检索数据.但是,当我运行语句时,出现命令不同步,您现在不能运行命令"错误.
I am using two prepared statements in PHP/MySQLi to retrieve data from a mysql database. However, when I run the statements, I get the "Commands out of sync, you can't run the command now" error.
这是我的代码:
$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1";
$stmt->bind_param('s', $loweredEmail);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
$stmt->fetch();
$stmt->free_result();
$stmt->close();
while($mysqli->more_results()){
$mysqli->next_result();
}
$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
//This is where the error is generated
$stmt1->bind_param('s', $user_id);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($privileges);
$stmt1->fetch();
我尝试过的事情:
- 将准备好的语句移动到两个单独的对象.
-
使用代码:
- Moving the prepared statements to two separate objects.
Using the code:
while($mysqli->more_results()){
$mysqli->next_result();
}
//To make sure that no stray result data is left in buffer between the first
//and second statements
PS:不同步"错误来自第二条语句的"$ stmt1->错误"
PS: The 'Out of Sync' error comes from the second statement's '$stmt1->error'
推荐答案
在mysqli :: query中,如果使用MYSQLI_USE_RESULT,则所有后续调用都将返回错误命令,除非您调用mysqli_free_result()
In mysqli::query If you use MYSQLI_USE_RESULT all subsequent calls will return error Commands out of sync unless you call mysqli_free_result()
在调用多个存储过程时,您可能会遇到以下错误:命令不同步;您现在不能运行此命令". 即使在两次调用之间对结果对象使用close()函数,也会发生这种情况. 要解决此问题,请记住在每次存储过程调用之后在mysqli对象上调用next_result()函数.请参见下面的示例:
When calling multiple stored procedures, you can run into the following error: "Commands out of sync; you can't run this command now". This can happen even when using the close() function on the result object between calls. To fix the problem, remember to call the next_result() function on the mysqli object after each stored procedure call. See example below:
<?php
// New Connection
$db = new mysqli('localhost','user','pass','database');
// Check for errors
if(mysqli_connect_errno()){
echo mysqli_connect_error();
}
// 1st Query
$result = $db->query("call getUsers()");
if($result){
// Cycle through results
while ($row = $result->fetch_object()){
$user_arr[] = $row;
}
// Free result set
$result->close();
$db->next_result();
}
// 2nd Query
$result = $db->query("call getGroups()");
if($result){
// Cycle through results
while ($row = $result->fetch_object()){
$group_arr[] = $row;
}
// Free result set
$result->close();
$db->next_result();
}
else echo($db->error);
// Close connection
$db->close();
?>
我希望这会有所帮助
这篇关于PHP命令不同步错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!