是否可以在 MySQL 中执行字符串?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/999200/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Is it possible to execute a string in MySQL?
提问by aarona
I have to convert a MSSQL stored proc that passes a varchar
that is a query:
我必须转换一个通过varchar
查询的 MSSQL 存储过程:
INSERT INTO Results
EXEC (@Expresion);
This isn't working. I'm pretty sure that EXEC
and EXECUTE
aren't MySQL commands, but CALL
doesn't work either.
这不起作用。我敢肯定,EXEC
而EXECUTE
不是MySQL的命令,但CALL
也不管用。
Does anyone know if it's even possible to have something like JavaScript's eval
function for MySQL?
有谁知道是否有可能eval
为 MySQL 提供类似 JavaScript 的功能?
采纳答案by Brandon Bodnar
EXECUTE is a valid command in MySQL. MySQL reference manual
EXECUTE 是 MySQL 中的有效命令。MySQL 参考手册
回答by Tengiz
I think you're looking for something like this:
我想你正在寻找这样的东西:
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;
回答by Luc
This is the SQL equivalent of eval(my_string);
:
这是 SQL 等效项eval(my_string);
:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
Basically I combined the existing answers, neither tells you how to do eval exactly.
基本上我结合了现有的答案,都没有告诉你如何准确地进行评估。
If you want to add parameters, you can use this:
如果要添加参数,可以使用:
@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
And to answer the original question exactly:
并准确回答原始问题:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
Note that the PREPARE ... FROM
statement wants a session variable (prefixed with @
). If you try to pass a normal variable, it will throw its hands up in the air and it just won't care.
请注意,该PREPARE ... FROM
语句需要一个会话变量(以 为前缀@
)。如果你试图传递一个普通变量,它会把手举在空中,它不会在意。
回答by kenorb
The EXECUTE
MySQL command can only be used for one prepared statement.
在EXECUTE
MySQL命令只能用于一个事先准备好的声明。
If case you want to execute multiple queries from the string, consider saving them into file and source it, e.g.
如果您想从字符串中执行多个查询,请考虑将它们保存到文件中并获取它,例如
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;