7

ページでプロシージャを複数回呼び出すと、コンテンツの呼び出しと表示が困難になります。MYSQL の 2 つの異なる SP 呼び出しから 2 つの別個のレコード セットを表示しようとしています。最初の呼び出しは表示できますが、2 番目の呼び出しは失敗します。何が間違っているのかわかりませんが、誰かが親切に助けてくれるでしょうか?

2 番目のプロシージャを呼び出すと、エラーが発生し続けます。

Error calling SPCommands out of sync; you can't run this command now

Windowsで実行しています

以下のコード... PHP

// First call to SP
$page = 2;
$section = 1;

include("DatabaseConnection.php"); //general connection - works fine

$sql = 'CALL GetPageContent("'.$page.'", "'.$section.'")';

$result = mysqli_query($conn, $sql) or die('Error calling SP' .mysqli_error($conn));

while($row=mysqli_fetch_assoc($result))
{
   // DO STUFF< REMOVED TO MAKE READING CLEARER
}

mysqli_free_result($result);

//SECOND CALL BELOW


$section = 2; // change parameter for different results

$sql = 'CALL GetPageContent("'.$page.'", "'.$section.'")';

$result = mysqli_query($conn, $sql) or die('Error calling SP' .mysqli_error($conn));


while($row=mysql_fetch_assoc($result))
{
   // DO STUFF< REMOVED TO MAKE READING CLEARER
}
4

2 に答える 2

10

この問題を解決するには、next_result()ストアド プロシージャを呼び出すたびに mysqli オブジェクトで関数を呼び出すことを忘れないでください。以下の例を参照してください。

<?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();
?>
于 2012-05-24T21:22:16.943 に答える