如何在 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_NAMES
和record_values
之间的差异。
我正在尝试编写一个使用 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_NAMES
和record_values
之间的差异。