ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PDO がストアド プロシージャを呼び出してパラメータを返す問題

PHP_PDO がストアド プロシージャを呼び出してパラメータを返す問題

WBOY
WBOYオリジナル
2016-06-23 14:39:011125ブラウズ

$stmt = $db->prepare("CALL pro_test(?,@?)");		$stmt->bindParam(1, $name);		$stmt->bindParam(2, $return_value, PDO::PARAM_STR, 4000);				// 插入一行		$name = '成都市';		$stmt->execute ();		print_r($return_value);


ストアド プロシージャを呼び出すと、戻りパラメータが空になるのはなぜですか? データベースを確認してください。データが正常に追加されました。
SET @n = -1;
CALL pro_test("ああ、それはplan" ,@n);
select @n;
正しいパラメータがすべて返されます


ディスカッション (解決策) に返信します

ストアド プロシージャを呼び出すと、データベースは複数の結果セットを返す場合があります

順序:基本的な select 、ストアド プロシージャ 1 の結果、ストアド プロシージャ 2 の結果....
SQL 命令は select なしの CALL pro_test(?,@?) であるため、2 番目の結果セットにのみ配置できます
If書かれた select CALL pro_test(? ,@?) は最初の結果セットにあります
もちろん、環境は非常に変わりやすいので、結果セットがどこにあるのかを正確に知ることはできません
したがって、ループで読み取る必要があります

  do {    $rows = $stmt->fetchAll(PDO::FETCH_NUM);    if ($rows) {      print_r($rows);    }  } while ($stmt->nextRowset());

ストアド プロシージャを呼び出すと、データベースは複数の結果セット

を順番に返します: 基本的な選択の結果、ストアド プロシージャ 1 の結果、ストアド プロシージャ 2 の結果....
SQL 命令はselect なしで CALL pro_test(?,@?) を実行すると、2 番目の結果セットにのみ配置されます
select CALL pro_test(?,@?) を記述すると、最初の結果セットに配置されます
もちろん、環境は非常に変化しやすく、結果セットがどこに配置されるかを実際には正確に知ることはできません
したがって、ループで読み取る必要があります

  do {    $rows = $stmt->fetchAll(PDO::FETCH_NUM);    if ($rows) {      print_r($rows);    }  } while ($stmt->nextRowset());


あなたが言ったことによると、実行後にsqlの前にselectを追加します。追加する前に、データは正常に追加され、エラーは報告されません。
select を削除するとデータを追加できますが、 print_r($stmt->fetchAll(PDO::FETCH_NUM)); によって返される結果は Array ( ) です
、よく理解できません。

あなたはデータベースマネージャーにいます

SET @n = -1;CALL pro_test("啊是打算",@n);select @n;

3 つの命令を実行するには

それでは、php で 1 つに単純化するにはどうすればよいでしょうか

データベースマネージャーで 3 つの命令を実行するには

SET @n = -1;CALL pro_test("啊是打算",@n);select @n;

が必要です

では、どうすればできるでしょうかphp で 1 に簡略化する 以上です

では、PHP ではどのように書けばよいでしょうか?たくさんの情報を確認した結果、PHP.net のデモはすべて間違っています

データベースマネージャーで 3 つの命令を実行する必要があります

それから、PHP でそれを 1 つに単純化する方法

分かりました
すごいです

アイデアをありがとう

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。