我有一个类似的存储过程(但更长)。它是从 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 会话变量,只要我的会话还活着。@s 的存在让我很恼火,因为我担心该存储过程上的 2 个并发请求可能会使用这个“全局变量”。所以我试着像这样删除'@'
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):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'full_statement; 附近使用的正确语法;执行语句;
我对 php 会话中的 2 个调用的恐惧真的是个问题吗?(如果没有,有 200 个使用同一个全局变量的存储过程怎么样)?
我真的可以实现我的目标并删除'@'并让准备好的语句由一个简单的存储过程变量处理,还是它是准备好的语句的约束?
问候。