Ist es möglich, eine Zeichenfolge in MySQL ausführen?
-
14-09-2019 - |
Frage
Ich habe eine MSSQL gespeicherte Prozedur zu konvertieren, die eine varchar
gibt, der eine Abfrage:
INSERT INTO Results
EXEC (@Expresion);
Das funktioniert nicht. Ich bin mir ziemlich sicher, dass EXEC
und EXECUTE
sind nicht MySQL-Befehle, aber CALL
funktioniert auch nicht.
Wer weiß, ob es überhaupt möglich ist so etwas wie JavaScript ist eval
Funktion für MySQL haben?
Lösung
EXECUTE ist ein gültiger Befehl in MySQL. MySQL-Referenzhandbuch
Andere Tipps
Ich glaube, Sie suchen etwas wie folgt aus:
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;
Dies ist das SQL-Äquivalent von eval(my_string);
:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
Im Grunde kombiniert ich die vorhandenen Antworten, weder erfahren Sie, wie eval genau das tun.
Wenn Sie Parameter hinzufügen möchten, können Sie diese verwenden:
@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
Und die ursprüngliche Frage zu beantworten, genau:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
Beachten Sie, dass die PREPARE ... FROM
Anweisung einer Session-Variablen (mit dem Präfix @
) will. Wenn Sie versuchen, eine normale Variable zu übergeben, wird er seine Hände in die Luft werfen und es wird nur nicht.
Die EXECUTE
MySQL-Befehl kann nur für einen verwendet werden vorbereitete Aussage.
Wenn Fall, dass Sie mehrere Abfragen aus der Zeichenfolge auszuführen, sollten Sie sie in der Datei und Quell es zu speichern, z.
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;