2011-06-21 5 views
5

MySQLストアドプロシージャでPHP PDOを使用し始めましたが、プロシージャコールからOUTパラメータを取得する方法に問題があります。私は多くの同様のstackoverflowのトピックを見ましたが、残念ながら私は私の問題を解決する方法を見つけることができませんでした:ここPHP PDOがOUTパラメータ値を取得できない

詳細は、次のとおり

手順は、1つの入力パラメータを受け取り、2つの必須の出力パラメータを有し、そして戻り、それらにステータスをもたらします。

これは、私はそれを呼び出す方法です:

$input = 5; 
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass"); 
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)"); 
$proc->execute(); 

手順@o_messageパラメータで@o_codeパラメータとSTRINGにINTを返します。それはCLIから呼び出され、呼び出しの後、私は

select @o_code, @o_message; 

すべてがOKであるCLIで書くなら は、それは私がこれらのOUTパラメータに返された値を見ることができています。 しかし、私はPHPコードからそれを行うことはできません - 何らかの理由で私はいつも偽の結果を得る。手続きは正しく実行されますが、その結果は得られません。

私は、上記の呼び出し作る右後、値を取得するには、次の方法を試してみました:

$output = $proc->fetch(PDO::FETCH_ASSOC); // also with PDO:FETCH_OBJ 
$output = $mydb->query("select @o_code, @o_message"); 
$output = $mydb->query("select @o_code, @o_message")->fetch(); 
$output = $mydb->query("select @o_code, @o_message")->fetchColumn(); 
$output = $mydb->query("select @o_code, @o_message")->fetchAll(); 

が、これらのどれもがNULL異なるまたはFALSE任意の結果を返します。私もbindParamで試しましたが、それでも動作させることはできませんでした。

この問題と良い一日に助けていただきありがとうございます!

----- ----- EDIT

はここでまだ動作しません、私はbindParamで試したコード、次のとおりです。

$input = 5; 
$proc = $mydb->prepare("CALL proc_name(?, ?, ?)"); 
$proc->bindParam(1, $input, PDO::PARAM_INT); 
$proc->bindParam(2, $code, PDO::PARAM_INT); 
$proc->bindParam(3, $message, PDO::PARAM_STR); 
$proc->execute(); 

var_dump($code, $message); // NULL, NULL 
+0

が見つかり、それ:あなたが指しているhttp://stackoverflow.com/a/32224294/2717254 –

+0

質問ここに投稿された質問の問題は解決されません。以下の受け入れられた答えをチェックして、問題が「closeCursor()」が正しく動作するように呼び出されていることを確認できます。他のquesionのあなたの答えは、そのコード行を持っているので、私の推測ではどちらもうまくいきません。 – middlehut

+1

答えは出力パラメータ値を取得することです! closeCursor()呼び出しは関与しません。私はより良いbtwを明確にするための答えを更新しました –

答えて

5

問題はその最初のクエリは、ということでしたストアドプロシージャの呼び出しが完了したとみなされず、閉じられているため、PDOは前のクエリが完了するまで別のクエリを実行しません。

ソリューションを追加することでした$proc->closeCursor();

全体の作業のサンプルは次のとおりです。

$input = 5; 
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass"); 
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)"); 
$proc->execute(); 
$proc->closeCursor(); 

$output = $mydb->query("select @o_code, @o_message")->fetch(PDO::FETCH_ASSOC); 
var_dump($output); // array('@o_code'=>value, 'o_message'=>value) 
関連する問題