aar*_*ona 27 mysql evaluation eval execute exec
我必须转换传递varchar一个查询的MSSQL存储过程:
INSERT INTO Results
EXEC (@Expresion);
Run Code Online (Sandbox Code Playgroud)
这不起作用.我敢肯定,EXEC而EXECUTE不是MySQL的命令,但CALL也不管用.
有谁知道甚至可能有类似JavaScript的evalMySQL函数吗?
Ten*_*giz 17
我想你正在寻找这样的东西:
SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM (
SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9
) as qwe
) as www
);
PREPARE stmt FROM @queryString;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @asd = NULL;
Run Code Online (Sandbox Code Playgroud)
Luc*_*Luc 12
这是SQL的等价物eval(my_string);:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
Run Code Online (Sandbox Code Playgroud)
基本上我结合了现有的答案,都没有告诉你如何准确地做eval.
如果要添加参数,可以使用:
@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
Run Code Online (Sandbox Code Playgroud)
并准确地回答原始问题:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
Run Code Online (Sandbox Code Playgroud)
请注意,该PREPARE ... FROM语句需要一个会话变量(前缀为@).如果你试图传递一个正常的变量,它会举起手来,它不会在乎.