【最大10000ポイント】当たる!!質問投稿キャンペーン!

アドバイスを頂けたらと思います。
php   5.1.6
mysql   5.0.22
接続方法 PDO

PHPよりストアドプロシージャを実行するとEXCUTEの部分で応答がなくなりMYSQLの SHOW PROCESSLIST を確認するとそのプロセスがSleep
になってしまっています。
記述方法が間違っているか、またはどこか設定するのか、参考意見を
頂ければと思います。

PHP側
<?php
try {
$user = 'sys';
$pass = 'sys';
$dbh = new PDO('mysql:host=localhost;dbname=testDB',
$user, $pass);
if ($st = $dbh->prepare("CALL Listget()") ){
$st->execute();
while ($row = $st->fetch()) {
print_r ($row);
}
}
}
catch (PDOException $e) {
print 'Error: ' . $e->getMessage(). "\n";
}
$dbh = null;
?>

ストアド
delimiter //
CREATE PROCEDURE Listget ( )
BEGIN
SELECT id FROM testTbl;
END
//

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

検証環境もなく、知識もないのですが、質問だけさせてください



ストアドプロシージャでなく、普通のSQLなら動くのか
$dbh->query()の方を使ってもやっぱり止まるのか

を知りたいです

その上で
http://jp.php.net/manual/ja/ref.pdo-mysql.php
のページ内をstoredで検索したら見つかった
rmottey at gmail dot com 09-Jan-2008 08:51 の投稿にあるように
PDO::setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true);
を行なった場合にどうなるのかを
聞きたいです。

この回答への補足

ご返答ありがとうございます。
状況ですが、

>ストアドプロシージャでなく、普通のSQLなら動くのか
はい動きます。

>$dbh->query()の方を使ってもやっぱり止まるのか
$dbh->query()でもストアドを使用すると止まります。
(普通のSQLでは動きます)

また頂いたアドバイス、ページを参考に
$dbh->setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true);
もしくは
$stmt = $dbh->prepare($sql, array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
といったように試してはいるのですが、同様に
SQLではうまくいくのですが、ストアドではうまくいきません。

度々で恐縮ですが、何かご意見がございましたら、
お願い致します。

補足日時:2008/02/23 12:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング