我正在使用Ruby on Rails与ActiveRecord和PostgreSQL。
如何执行多个SQL查询?
我需要运行一个自定义的迁移脚本,例如:
Foo.connection.execute <<-SQL.split(';').map(&:strip).join
delete from metadata where record_type = 'Foo';
TRUNCATE table1 RESTART IDENTITY;
TRUNCATE table2 RESTART IDENTITY;
delete from schema_migrations where version > '20120806120823';
SQL
我不接受用户数据,所以我不担心 SQL 注入问题。
MySQL 中类似 CLIENT_MULTI_STATEMENTS
的东西或许可以用?
来自 MySQL/PHP 文档:
CLIENT_MULTI_STATEMENTS: 告诉服务器客户端可能会在一个字符串中发送多个语句(使用“;”分隔)。如果没有设置此标志,则禁用多语句执行。有关此标志的更多信息,请参见本表后面的注释。
execute
而不进行不安全的字符串拆分。如果它直接在您的代码中,您可以将语句放入数组中并循环遍历它。 - Craig Ringerconnection.execute
并每次执行一个语句呢?我已经这样做了很多次(例如,在Rails应用程序中作为第一个迁移运行遗留SQL模式转储时)。 - Alistair A. Israel