2016-01-23 3 views
0

Я добавляю временную таблицу, которая содержит список имен файлов, которые будет использоваться вторым запросом. Я понимаю, что имена файлов могут использоваться для SQL-инъекций, поэтому я хочу использовать подготовленные операторы.Использование параметров для замены имен mysql для подготовленного оператора

упрощенная версия моего рабочего запроса выглядит следующим образом (например, там может быть 50 имен файлов):

CREATE TEMPORARY TABLE tempfile(filename varchar(100)); 
INSERT INTO tempfile (filename) 
    SELECT filename FROM (
     SELECT 'myfile.jpg' AS filename UNION SELECT "myfile2.jpg") xx; 

Я пытался заменить его:

CREATE TEMPORARY TABLE tempfile(filename varchar(100)); 
INSERT INTO tempfile (filename) 
    SELECT filename FROM (
     SELECT ? AS filename UNION SELECT ?) xx; 

Но mysql дает мне синтаксис ошибка. Любые идеи, как использовать параметры с этим запросом?

И если вы можете дать мне лучшее название для этого сообщения, я его изменю.

ОБНОВЛЕНИЕ - Примечание

Этот запрос будет вставлять две записи. Вы можете запросить их:

SELECT tf.filename FROM tempfile 
+0

Какой смысл «UNION SELECT» myfile2.jpg «'? Это никогда не будет вставлено. –

+0

@TomasoAlbinoni Этот запрос вставляет список имен файлов таким образом в столбец 'filename'. Это способ вставить данные таблицы со списком известных значений. В приведенном выше запросе будут вставлены два имени файла. – mseifert

+0

Я стою исправлена. Я был исключен из-за отсутствия имени столбца, но я думаю, что «UNION» позаботится об этом. –

ответ

1

попробовать что-то вроде этого:

INSERT INTO tempfile (filename) 
VALUES 
(?),(?),(?); 
+0

CREATE TEMPORARY TABLE tempfile (имя файла varchar (100)); INSERT INTO tempfile (имя файла) VALUES (?), (?); Ошибка Sql #: 1064 - У вас есть ошибка в синтаксисе SQL; Я что-то пропустил? – mseifert

+0

Конечно, с предыдущим утверждением было следующее: if (! ($ Stmt = $ db-> mysqli-> prepare ($ q))) {...} 'где' $ q' был показан запрос. – mseifert

+0

Ваше сообщение помогло мне найти то, что я делаю неправильно. Спасибо за ввод. – mseifert

0

Я преобразования multi_query в подготовленное заявление и каждое заявление необходимо работать с отдельной подготовки и выполнения. Простой и очевидный.

Смежные вопросы