1

私はプログラミングの経験があまりありません。XAMPP/MySQL の最新バージョンを参照すると、MySQL ルーチンでセッション変数を使用できるはずですか? 私はphpMyAdminを使用しているので、以下は入力された完全なコードを表しています。

私のルーチンはこのようなものです: -

BEGIN
    SELECT @x;
END

しかし、私が実行すると

SET @x:= 6;
CALL routine;

何も返されません。

私のルーチンが次のような場合:

BEGIN
    DECLARE x INT; 
    SET x := 5;
    SELECT x;
END

そして私は実行しますCALL routine;

x と 5 が下にあるテーブルが返されます。

それ以外の場合、ルーチンは、セッション変数を NULL として返すか、ルーチンが変更したはずの @x の変更されていない値を返す効果があるようです。これを説明するものをウェブ上で見つけることができませんでした。私は何を間違っていますか?

4

1 に答える 1

1

私にとっては完璧に機能します:)うまくいかない場合は、phpMyAdminがリクエストごとに異なる接続を使用しているためです(そして、あなたはコマンドを1つずつ実行しています)。それらをすべて一度に実行します:)

drop procedure if exists routine_test;
delimiter //
create procedure routine_test ()
begin
    set @var := @var + 1;
    select 'inside routine', @var;
end;
// delimiter ; 


# now execute all these statements at same time
# executing them one by one, might make phpmyadmin use different connections

set @var = 1;
call routine_test();
call routine_test();
call routine_test();
select 'outside routine', @var;

動作しない場合、実行をクリックするたびに新しい接続を開始するのは phpmyadmin です (これは、php が接続を処理する方法です)。つまり、ページがユーザーのブラウザに送信された後に接続が閉じられ、セッションが終了し、変数が MySQL メモリから消去されます

于 2013-09-19T15:22:36.777 に答える