使用ruby tiny_tds gem我已连接到远程SQL Server数据库以获取一些记录。
我有一个值数组,我将传递给WHERE子句
names = ['Value Number1','800G'].join(',')
results = database.execute("SELECT * FROM Customers WHERE NAME IN(#{names})")
执行上述查询后,我收到以下错误
Incorrect syntax near 'Number1'.
当我手动传递值而不是使用变量
时,它会起作用results = database.execute("SELECT * FROM Customers WHERE NAME IN('Value Number1','800G')")
我也希望通过使用变量使其正常运行。提前致谢
答案 0 :(得分:1)
指定变量时会忽略单引号。
在定义数组时,您需要指定单引号。
names = ["'Value Number1'", "'800G'"].join(',')
(抱歉不熟悉ruby,但希望这能为您提供解决问题的想法。)
答案 1 :(得分:1)
使用
names = ["Value Number1", "800G"].map{|i|
ActiveRecord::Base.connection.quote(i)
}.join(',')
请注意ActiveRecord::Base.connection.quote
对于逃避引号非常重要,否则会破坏您的代码。
但无论如何,以这种方式注入params并不是一个好习惯。
尝试使用sanitize_sql_array
和其他方法来避免SQL injection problems。
答案 2 :(得分:0)
您生成的sql不正确。所以它应该是
names = [' Value Number1',' 800G']。join("','")
"值数字1',' 800G"
results = database.execute(" SELECT * FROM Customers WHERE NAME IN('#{names}')")
database.execute(" SELECT * FROM Customers WHERE NAME IN(' Value Number1',' 800G')")