Zend Framework 1.7.2、MySQL、および MySQLi PDO アダプターを使用しています。特定のアクション中に複数のストアド プロシージャを呼び出したいと考えています。Windows では、複数のストアド プロシージャの呼び出しに問題があることがわかりました。試してみると、次のエラー メッセージが表示されます。
SQLSTATE [HY000]: 一般エラー: 2014 他のバッファーされていないクエリがアクティブな間は、クエリを実行できません。PDOStatement::fetchAll() の使用を検討してください。または、コードが mysql に対してのみ実行される場合は、PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性を設定して、クエリのバッファリングを有効にすることができます。
この問題を回避するには、ストアド プロシージャを呼び出すたびにデータベースへの接続を閉じるだけでよいことがわかりました。
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
//If on windows close the connection
$db->closeConnection();
}
これは私にとってはうまくいきましたが、今ではトランザクションにラップされた複数のストアド プロシージャを呼び出したいと思っています。もちろん、開いているトランザクションのロールバックが発生するため、この状況では接続を閉じることはできません。この問題を解決する方法、および/または問題を回避する方法についてのアイデア。