是否可以在 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 13:30:40  来源:igfitidea点击:

Is it possible to execute a string in MySQL?

mysqlevalevaluationexecexecute

提问by aarona

I have to convert a MSSQL stored proc that passes a varcharthat is a query:

我必须转换一个通过varchar查询的 MSSQL 存储过程:

INSERT INTO Results
  EXEC (@Expresion);

This isn't working. I'm pretty sure that EXECand EXECUTEaren't MySQL commands, but CALLdoesn't work either.

这不起作用。我敢肯定,EXECEXECUTE不是MySQL的命令,但CALL也不管用。

Does anyone know if it's even possible to have something like JavaScript's evalfunction 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 ... FROMstatement 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 EXECUTEMySQL command can only be used for one prepared statement.

EXECUTEMySQL命令只能用于一个事先准备好的声明。

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;