2013-02-18 4 views
0

Предположим, у меня есть этот запрос:Как использовать '?' в SQL запросе

SELECT * FROM 'users' WHERE (username = 'foo' OR email = 'bar') 

Как бы сделать так, что запрос использует? вместо передачи значений напрямую. например.

SELECT * FROM 'users' WHERE (username = ? OR email = ? ... 

И, если это возможно, введите указанные в предложениях WHERE().

EDIT: Я где-то читал об этом, используя? метки в запросах улучшают производительность и помогают с помощью SQL-инъекций. Это то, что я пытаюсь сделать здесь.

+0

Какой вкус SQL? Обычно это будет функция клиента/кода, который отправляет запрос на сервер базы данных. – AndrewP

+0

'?' Используется для определения держателей мест. И используются с подготовленными заявлениями. Что вы пытаетесь сделать? – Starx

+0

Я пытаюсь сделать SELECT * FROM 'users' WHERE ('username =? OR email =?', 'Foo', 'bar'), поэтому foo и bar заменяют заполнители. –

ответ

8

В MySQL символ вопроса, который вы можете найти в вашем запросе, называется заполнитель параметров. Он обычно используется, когда вы создаете оператор Prepare (динамический sql). ех,

SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; 
PREPARE stmt2 FROM @s; 
SET @a = 6; 
SET @b = 8; 
EXECUTE stmt2 USING @a, @b; 

UPDATE 1

вот пример выбора на основе данных выше,

SET @s = 'SELECT * FROM tableName WHERE username = ? and email = ?'; 
PREPARE stmt2 FROM @s; 
SET @a = 'foo'; 
SET @b = 'bar'; 
EXECUTE stmt2 USING @a, @b; 
+0

Возможно ли заполнить заполнители и выполнить запрос SELECT в одной команде? –

+0

Что вы подразумеваете под заполнением заполнителей? вы можете создать из него хранимую процедуру. –

+0

Мне интересно, можно ли использовать заполнители, предоставить значения для заполнителей и выполнить запрос в той же команде sql. –

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