、私はPDO
を使用してMySQL
stored procedure
を呼び出すときに、ちょうどこのように、別のPDO
のクエリ、:、私はPDOを使用してMySQLのストアドプロシージャ、その後、別のクエリを呼び出すときに、私はエラーを取得する:PHPで
CREATE PROCEDURE `get_token`()
BEGIN
DECLARE token CHAR(64);
DECLARE expire SMALLINT;
SELECT `token`, `expire` INTO token, expire FROM `token`;
SELECT token, expire;
END$$
そして、私は次のエラーメッセージ(それをキャッチするためにtry...catch
を使用して)得た:
$dbh = new PDO('mysql:host=localhost;dbname=db1','user1','password1');
$query = "CALL get_token()";
$stmt = $dbh->query($query);
$array = $stmt->fetchAll();
$query = "SELECT * FROM `table1`";
$stmt = $dbh->query($query);
$array = $stmt->fetchAll();
MySQL
stored procedure
約このようなものです
General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
I(つまりfetchAll()
を使用しPDO::MYSQL_ATTR_USE_BUFFERED_QUERY
属性設定手段)上記のエラーメッセージで説明されている手順に従った場合でも、私はまだ同じエラーメッセージを得ました。
最初のクエリを通常のSELECT
SQLクエリに変更すると、stored procedure
ではなく、このエラーは発生しません。したがって、問題はstored procedure
から発生しているようです。
どうすればこの問題を解決できますか?
エラーメッセージに示唆されたことをやってみましたか? – Mark
エラーメッセージの2つの提案に従っていますが、どちらもうまくいきませんでした。 :-(@マーク – Benson
'$ stmt-> closeCursor()'または 'unset($ stmt)'を使って私があなたに勧めた投稿に記載されている2つの方法を試しましたが、残念なことに、私のために働いています:-(@yiboulex – Benson