如何在 Ruby 脚本中清理原始 SQL

How to sanitize raw SQL in a Ruby script

我正在尝试编写一个使用 Sequel 连接数据库的脚本。

如果我有这样的 SQL 查询:

record_values = csv_row.to_h.values.join(', ')

sql_query = "INSERT INTO table (#{ COLUMN_NAMES.join(', ') }) VALUES (#{ record_values })"

数组record_values是危险的。

我该如何消毒它?

我尝试使用

进行消毒
ActiveRecord.sanitize_sql_array(sql_query)

但我一直收到错误

NoMethodError: undefined method 'sanitize_sql_array' for ActiveRecord:Module

我不知道 Sequel,但你尝试过标准 insert 方法吗?

connection = Sequel.connect('...')
table_name = connection.from(:table_name)
# OR
# table_name = DB.from(:table_name)
# table_name = DB[:table_name]
table_name.insert(csv_row.to_h)

我相信它更可靠,因为你避免了COLUMN_NAMESrecord_values之间的差异。