2013-07-29 2 views
20

Как избежать выполнения инструкции LIKE MySQL в node-mysql?Узел MySQL escape LIKE statement

Что-то вдоль линий

"SELECT * FROM card WHERE name LIKE '%" + connection.escape(req.body.search) + "%'" 

Результаты в

'SELECT * FROM card WHERE name LIKE \'%\'hello\'%\'' 

Какая ошибка синтаксиса. Если я использую альтернативный синтаксис

connection.query("SELECT * FROM card WHERE name LIKE '%?%'", req.body.search, function() {}); 

Результаты аналогичной синтаксической ошибки. Я также пробовал

connection.query("SELECT * FROM card WHERE name LIKE ?", '%' + req.body.search + '%', function() {}); 

Который только что заканчивает знак «%».

+0

Третий пример является правильным, какова точная проблема, которую вы видите? Обратите внимание: если вы хотите искать строки, которые буквально содержат процентные знаки, которые [сложнее] (http://stackoverflow.com/questions/2106207/escape-sql-like-value-for-postgres-with-psycopg2/2106443#2106443). – bobince

ответ

24

Не уверен, почему это спасаясь от % в вашем последнем примере, потому что отлично работает для меня:

// lifted from my code: 
var value = 'ee20e966289cd7'; 
connection.query('SELECT * from django_session where session_key like ?', '%' + value + '%', ...) 

// Result: 
[ { session_key: '713ee20e966289cd71b936084a1e613e', ... } ] 

При включении отладки в драйвере (передать debug:true в качестве аргумента mysql.createConnection), Безразлично» т бежать знак процента:

{ command: 3, 
    sql: 'SELECT * from django_session where session_key like \'%ee20e966289cd7%\'' } 

(это делает избежать апостроф, но это только для отображения)

(с использованием [email protected])

+1

Спасибо, ребята. Я думаю, что я просто схожу с ума, это действительно работает. – dtsn

9

я имел успех с чем-то вроде

"SELECT * FROM card WHERE name LIKE " + connection.escape('%'+req.body.search+'%') 
Смежные вопросы