我没有很多编程经验。 参考最新版本的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值的效果。我无法在网上找到任何解释这一点的内容。我究竟做错了什么?
答案 0 :(得分:1)
完美适合我:) 如果它不起作用是因为phpMyAdmin为每个请求使用不同的连接(并且你,先生,正在逐个执行命令)。一次执行所有操作:)
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内存中清除。