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();
?>
これがお役に立てば幸いです