0

PDO (PHP) を使用してストアド プロシージャ (MYSQL) から出力を取得できないようです。

ストアド プロシージャ:

CREATE PROCEDURE getUserId(serviceId VARCHAR(64), serviceInput VARCHAR(32))
BEGIN
    SELECT id FROM users WHERE servid = serviceId AND service = serviceInput;
END

PHP コード:

$mysqlConn = mysqlPDOLogin();
$stmt = $mysqlConn->prepare("CALL getUserId(?,?);");
$stmt->bindParam(1, $USERID); 
$stmt->bindParam(2, $USERPROVIDER); 
$stmt->execute();
$returned_a = $stmt->fetch();
echo $returned_a['id'];

何も返されません。基本的な選択コードをストアド プロシージャからコピーし、それを PHP コードで直接使用しましたが、動作しますが、ストアド プロシージャを介して動作させることはできません。

どんな助けでも大歓迎です...

4

1 に答える 1

0

明らかなエラーチェックを行っていません。Prepare()、bindParam()、および execute() はすべて、PDO のエラー報告モードに応じて、false を返すか、例外をスローして、エラーを警告します。

「false を返す」モードになっていると仮定します。

$stmt が PDOStatement オブジェクトであること、bindParam ステートメントが false を返さなかったこと、execute が false を返さなかったことを確認する必要があります。それらのいずれかが発生した場合は、errorCode() と errorInfo() を使用して、何が問題なのかを調べる必要があります。

また、基本的に単純なクエリに対してストアド プロシージャを使用するのは、やや過剰に思えます。なぜ次のことをしないのですか?

$stmt = mysqlConn->prepare ('SELECT id FROM users WHERE servid = ? AND service = ?');
于 2012-08-04T05:49:16.977 に答える