我很确信这是不可能的,但以防万一:
如何绑定IN
运算符的右(list)参数?
SELECT foo FROM bar WHERE baz IN ('cow', 'chicken');
不幸的是,这并不奏效:
list = ['cow', 'chicken']
db.execute('SELECT foo FROM bar WHERE baz IN ?', list)
参数绑定不仅比直接插值更美观,而且更安全:使用它的一个主要原因是为了停止臭名昭著的Bobby Tables。但是,您是否坚持手动转义IN参数?
list = ['cow', 'chicken']
sqllist = list.map { |el| "'#{SQLite3::Database.quote(el)}'" }.join(',')
db.execute('SELECT foo FROM bar WHERE baz IN (#{sqllist})')
(The例子是Ruby with sqlite3 gem,但这个问题实际上适用于所有为您进行参数绑定的语言/库。)
1条答案
按热度按时间b4qexyjb1#
传递给
db.execute
的SQL只是一个字符串,占位符的数量只需要与传递给它的值的数量相匹配,因此,可以基于list.length
构建占位符,然后使用字符串插值将其放入:这是非常安全的,因为您确切地知道
placeholders
中的内容。