gpt4 book ai didi

mysql - 在mysql动态存储过程中,是否需要@var来构建准备好的语句?

转载 作者:行者123 更新时间:2023-11-29 13:39:18 24 4
gpt4 key购买 nike

我有一个类似的存储过程(但更长)。它是从 PHP 调用的(Apache 上的 GET 请求)

delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
SET @full_statement = CONCAT('SELECT ',col,' FROM ',tbl );
PREPARE stmt FROM @full_statement;
EXECUTE stmt;
END
//
delimiter ;

据我所知,@s 是一个 mysql session 变量,只要我的 session 还活着。@s 的存在让我很烦恼,因为我担心存储的 2 个并发请求proc 可能会使用这个“全局变量”。所以我尝试像这样删除“@”

delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
DECLARE full_statement VARCHAR(300);
SET full_statement = CONCAT('SELECT ',col,' FROM ',tbl );
PREPARE stmt FROM full_statement;
EXECUTE stmt;
END
//
delimiter ;

构建准备好的语句但没有成功。

我似乎一直在

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'full_statement; EXECUTE stmt;

  • 我担心 php session 中的 2 个调用真的是一个问题吗?(如果没有,那么让 200 个存储过程使用相同的存储过程怎么样?全局变量)?

  • 我真的可以实现我的目标吗?去掉“@”,让准备好的人语句由简单的存储过程变量处理,还是准备语句的约束?

问候。

最佳答案

是的,@var 是必需的。

MySQL 的 PREPARE 语句仅接受“用户变量”(以 @ 为前缀的变量),而不接受存储例程中声明的局部变量。

这在 MySQL 中一直被认为是 WTF:

Does my fear of 2 calls within my php session is really a problem ?

没有。它不是一个全局变量,它是一个 session 变量。
两个并发 session 对于@var 都有自己的值。

关于mysql - 在mysql动态存储过程中,是否需要@var来构建准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com