我在PHP / MySQLi中使用两个准备好的语句从mysql数据库检索数据。但是,当我运行语句时,出现“命令不同步,您现在不能运行命令”错误。
这是我的代码:
$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();
我尝试过的
使用代码:
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
使用free_result()和mysqli_stmt-> close()
PS:“不同步”错误来自第二条语句的“ $ stmt1-> error”
在mysqli :: query中,如果您使用MYSQLI_USE_RESULT,则所有后续调用都将返回错误命令,除非您调用mysqli_free_result()
调用多个存储过程时,可能会遇到以下错误:“命令不同步;您现在不能运行此命令”。即使在两次调用之间对结果对象使用close()函数,也会发生这种情况。要解决此问题,请记住在每次存储过程调用之后在mysqli对象上调用next_result()函数。请参见下面的示例:
<?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(); ?>
我希望这个能帮上忙