2

MySQL ストアド プロシージャから OUT パラメータを取得する必要があります。これを説明するものは何も見つかりません(そして私にとっては理にかなっています)。

try {
$dsn = 'mysql:dbname=db_name;host=localhost';
$dbh = new PDO($dsn, 'usr_name', 'password');
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

$stmt = $dbh->prepare("CALL db.stprNewUser(:usrEmail,:newUserOK,:stprComment)");

$stmt->bindParam(':usrEmail', $tmpEmail, PDO::PARAM_STR); 
$stmt->bindParam(':newUserOK', $newUserOK, PDO::PARAM_INT,1); 
$stmt->bindParam(':stprComment', $stprComment, PDO::PARAM_STR,100); 

$stmt->execute();

$outputArray = $dbh->query("select @newUserOK, @stprComment")->fetch(PDO::FETCH_ASSOC);

print "procedure returned [" . $outputArray['@newUserOK'] . $outputArray['@stprComment'] . "]\n";

別の SO 項目の最後の 2 行を見つけましたが、NULL 値を返すだけです。

4

3 に答える 3

1

MySQL セッション変数を使用する以外に、bindParam()を使用できます。

bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

PHP 変数を、ステートメントの準備に使用された SQL ステートメント内の対応する名前付きプレースホルダーまたは疑問符プレースホルダーにバインドします。PDOStatement::bindValue() とは異なり、変数は参照としてバインドされ、PDOStatement::execute() が呼び出されたときにのみ評価されます。

ほとんどのパラメーターは入力パラメーターです。つまり、クエリを作成するために読み取り専用で使用されるパラメーターです。データを出力パラメーターとして返すストアド プロシージャの呼び出しをサポートするドライバーもあれば、データを送信し、データを受信するために更新される入力/出力パラメーターとして呼び出すドライバーもあります。

対応するプレースホルダーを使用することを忘れないでください:

$stmt = $dbh->prepare("CALL superior_main_db.stprNewUser(:usrEmail, :newUserOK, :stprComment)");

ステートメントを実行すると、変数には必要な値が自動的に含まれます。

于 2013-04-01T09:23:49.030 に答える
0

@newUserOK および @stprComment 変数を取得するには、以下のようにストアド プロシージャを呼び出した後、以下のクエリを実行します。

SELECT @newUserOK, @stprComment
于 2013-04-01T09:28:10.963 に答える