ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PDO がストアド プロシージャを呼び出してパラメータを返す問題
$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);
順序:基本的な 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());
SET @n = -1;CALL pro_test("啊是打算",@n);select @n;
SET @n = -1;CALL pro_test("啊是打算",@n);select @n;
データベースマネージャーで 3 つの命令を実行する必要があります
それから、PHP でそれを 1 つに単純化する方法
分かりました
すごいです
アイデアをありがとう