![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
PHP+MySQL+PDOでストアドプロシージャを2回実行すると
「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」
のエラーが発生します。
いろいろ調べたのですが、回避方法が分かりません。
どなたか、お分かりの方がいらっしゃいましたら、ご教授下さい。
宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
補足へのお返事遅くなりましたが、同じprocedure を2回ではないのですね。
2回目っていうより、CALL GetMessage() で、返ってくる中身の問題のような気がします。select 文一つなら、問題ないですけど、2つのselect文を発行していて、カラムリストが異なるとPDO側で受け取れないんじゃなかったかな?
phpやMySQLの version にもよるのかもしれません。php5.2.4 の時は、エラーだった気がするけど、php5.3.0 , MySQL5.1.41 で2つのselect文を発行するprocedureのcallを実験したら、エラーにはならないけど、2つ目のselect文内容は受け取れませでした。
あんまり、原因解明にならなくてすみません。
この回答への補足
ありがろうございます。
GetMessage()のSelect文は一つです。
問題はversionかも知れませんね。
ちなみに、現象が発生しているVersionはPHPが5.2.9、MySqlが5.1.33でversionを上げれば解決するかも知れませんが、私が使用しているレンタルサーバの各versionが、現象が出ているものより下なのでprocedureを使用するのを、あきらめます。
いろいろ、ご回答頂きありがとうございました。
No.1
- 回答日時:
2回実行って、query($sql) メソッドを続けて2回実行という意味ですか?
2回目の queryメソッド実行前に、「前回得られたデータを全部 fetchall() で取り出しておけ」というメッセージのように読みとれるんですが?
それとも一回のqueryメソッド実行時に、2行のSQL文を入れたのでしょうか?クエリの発行を2回に分けて、おのおのfetchall()で取り出すしかないかと思いますけど?
この回答への補足
ありがとうございます。
2回目のfatchをする前にエラーが返ります。また、1回目のfatchはfatchallで取り出しています。
説明不足でした。具体的なロジックは以下の通りです。
//1回目のストアド
//PDO ストアド実行
$sth = $dbo->prepare('CALL login(?,?)');
$sth->bindParam(1,$UserId, PDO::PARAM_STR,10);
$sth->bindParam(2,$Pasword, PDO::PARAM_STR,128);
$sth->execute();
//ストアドから結果を取り出す
$row = $sth->fetchAll();
$sth->closeCursor();
//2回目のストアド
//PDO メッセージ取得ストアド実行
$next_sth = $dbo->prepare('CALL GetMessage()');
$next_sth->execute();
--ここでエラーが返ります
//ストアドから結果を取り出す
$MessageRow = $sth->fetchAll();
$next_sth->closeCursor();
以上。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP PHP & MySQL: Server-side Web Development ペーパ 1 2022/04/19 19:23
- 英語 英文の添削をお願いします 4 2023/05/23 11:10
- MySQL MySQLでcreateが使えない MySQLを使ってデータベースを作ろうと思い、CREATE を使 3 2022/06/19 15:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでのdeadlockをPHPで検出...
-
xserver のCronでphpを実行する...
-
【PHP】命令は記述順に処理...
-
Prompt入力値をphp変数として取...
-
PHP&Mysql&Cronを使って自動...
-
PHPで、C#のプログラムを実行す...
-
system関数で一部のプログラム...
-
ファイルの実行権限について
-
PHP(Windows)でコマンド実行
-
透過PNGが透過されない!!
-
CFileDialogの最初のディレクト...
-
【file_exists】ファイルが存在...
-
フォントの色を変えるには?
-
VB6にてメールを送信する方法
-
C# Excelファイルへの画像挿入。
-
フォームで戻った際に入力済み...
-
.htaccessにphp_valueが使用できな
-
別ファイルの変数を呼び出した...
-
3つ以上の論理積は利用可能なの...
-
onedrive にexcelファイルをア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
PHPからバッチファイルの実行
-
php実行中に実行中のphpファイ...
-
Prompt入力値をphp変数として取...
-
Switch文における、returnとbre...
-
phpからエクセルのマクロを実行...
-
ヒアドキュメントの中で演算子...
-
copy() で属性保存
-
httpdのプロセスが自動で消えな...
-
別サーバのプログラムを起動
-
シェルスクリプトをPHPで動かそ...
-
【PHP】命令は記述順に処理...
-
MySQLでのdeadlockをPHPで検出...
-
Linux:PHPでTELNETによるSMTP...
-
サーバーモジュールとCGIプロセ...
-
ブラウザからexecコマンドを実...
-
phpスクリプトのみで定期実行
-
phpのshell_exec関数の動作に関...
-
PHPからlhaコマンドを使いたい
-
htmlでsubmitで指定したAction...
おすすめ情報