3

同じ接続ステートメント (PDO を使用) で 2 番目のストアド プロシージャを実行しているときに、以下のエラーが発生します。

=================================================

SQLSTATE[HY000]: 一般エラー: 2014 他のバッファリングされていないクエリがアクティブな間は、クエリを実行できません。PDOStatement::fetchAll() の使用を検討してください。または、コードが mysql に対してのみ実行される場合は、PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性を設定して、クエリのバッファリングを有効にすることができます。

================================================== =====

これは drupal の私のコードです

$conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

$statement = $conn->prepare("CALL Odd_Get_Sport()");
$exec_result = $statement->execute();
while ($row = $statement->fetchObject()) {   
  print_r($row);
}


$statement ->closeCursor();

$statement1 = $conn->prepare("CALL Odd_Get_Sport()");
$exec_result1 = $statement1->execute();
while ($row1 = $statement1->fetchObject()) {   
   print_r($row1);
}

これについて私を助けてください。

4

2 に答える 2

2

これは、十分に文書化されていない PDO の貧弱な機能です。ステートメントがストアド プロシージャを実行した場合、closeCursor メソッドは機能しません。nextRowSet メソッドを使用する必要があります。これが私が使用するものです

            while($sth->nextRowSet())
        {
            $sth->fetchAll();
        }
        $sth->closeCursor();
于 2013-05-01T22:54:37.843 に答える