MySQL删除会话变量

MySQL Delete Session Variable

状况:MySQL查询使用的值,从外面进行交付。这是做通过declaring和initializing a session变量,这是有效期至年底的一次: </P >

1
2
3
4
SET @id = 0;

SELECT * FROM my_table
WHERE id = @id;

问题:这是一个好的做法来删除session变量在查询有成品(为安全原因)???????什么是最adequate通这样做吗? </P >

研究发现:在我下面的建议,但有一些doubts为它就像"uninitialise",而不是"undeclare状": </P >

1
SET @id = NULL;


使用会话变量传递参数是一种糟糕的实践(使用全局变量通常表示代码味道)。因此,没有足够或推荐的方法来处理您的情况(1)。

你评论说:

Using name parameters is more flexible than place parameters using"?", because adding/removing a variable needs no order changes in code.

这是一种幻觉。使用这种方法,您仍然需要记录"某处",您的过程在调用之前需要声明一些变量。这也介绍了您正试图解决的问题。

另一方面,存储过程(或准备好的语句)是自记录的,参数具有众所周知的范围和寿命。

现在,要回答具体问题:

How to delete/unset a session variable?

只有SET @id = NULL;一条路可以走。您不能"取消声明"会话变量,因为您不能"声明"会话变量(请尝试SELECT @dummy_variable_never_declared_before;)。mysql会话变量与shell环境变量非常相似。(2)

(1)…除非确保会话在完成后关闭。关闭会话肯定会清除所有会话变量。

(2)我已经了解到bash会话变量确实可以取消设置。


我没有读过手册或任何东西。但是我在使用@变量时发现它们随着数据库连接而消失。我想这就是你所谓的会议。在任何情况下,重新连接到数据库似乎都会删除所有变量。如果将mysql与Web服务器一起使用,这意味着一旦传递了一个页面,所有变量就会被删除。我就是这样发现的。不能将SQL@-变量从一个HTTP调用保留到另一个HTTP调用。