3

この問題を本質的に分解しましたが、まだ問題があります。

fetch_all を使用してストアド プロシージャの結果を取得しようとすると、期待どおりに結果が配列に返されますが、その後の mysqli 呼び出しで「command out of sync」エラーがスローされます。

ストアドプロシージャを単純化しようとさえしました...

CREATE PROCEDURE testp()
BEGIN
   SELECT * FROM tbl
END

テーブルを小さくして、10行3列にしました。

私は次のPHPを使用します

$query = "CALL testp()";
$result = $db->query($query);
$rows = $result->fetch_all(MYSQL_ASSOC);
$result->free();
print_r($rows);
$query = "SELECT * FROM tbl WHERE id = ?";
$stmt = $this->db->prepare($query);
echo $this->db->error;
$stmt->close();

Echo の「コマンドが同期されていません。現在、このコマンドを実行できません」というメッセージが表示され、Fatal error: Call to a member function close() on a non-object がスローされます

$rows は期待どおりに出力されます

何か案は?

4

1 に答える 1

0

これが実際にmysqliが正直に機能する方法です!物事は2つのバッチで発生します。つまり、他のことを行う前に最後の結果をクリアする必要があります。そうしないと->エラー!

next_result()これは、次の例を使用して実現できます。

while($this->_mysqli->next_result());

..その後、コードを正常に続行します。上記の例は、fetch_assoc_プロセスが実行された直後、配列を返す前に適合します。

(私はこれが3か月前に尋ねられたことを知っていますが、決して遅くはありません;)

于 2012-07-17T12:49:49.807 に答える