0

我正在使用 Rails 通过传递动态列和表名从 Postgresql 获取数据。

我不能使用 ActiveRecord,因为从 shapefile 导入的形状数据是动态的,表名和列名都是动态的。我必须在查询中使用带有列名的双引号以避免出现诸如列名之类的问题:例如,“addr:city”。

def find_by_column_and_table(column_name, shape_table_name)
            sql = "SELECT \"#{column_name}\" FROM \"#{shape_table_name}\" WHERE \"#{column_name}\" IS NOT NULL"
            ActiveRecord::Base.connection.select_one(sql)
        end

2个生成sql语句的例子:

SELECT "place" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"
SELECT "addr:province" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"

我想确保查询中没有 sql 注入。

谁能指出我如何解决这个问题?

4

1 回答 1

1

防止注入、加速查询和捕获错误的推荐方法是使用位置参数或存储过程。少一点就是自找麻烦。

于 2011-02-11T04:03:12.247 回答