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 为每个请求使用不同的连接(你,先生,正在一个一个地执行命令)。一次执行它们:)

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 回答