0

我不知道如何在 ruby​​ 上做同样的事情:

在 php 中,我可以使用以下结构:

while ((list($r_key, $r_value) = each($rule_arr)) 
        && (list($v_key, $v_value) = each($value_arr)) 
        && (list($s_key, $s_value) = each($stack_arr)))
      {
          $insert_rules_for_types = sprintf("INSERT INTO                  
                  `rules_for_types`(`types_id`, `rules_id`, `value`, `stackcount`) 
                   value('%d','%d','%d','%d')", intval($type_id), intval($r_value), 
                   intval($v_value), intval($s_value));

      commit_changes($insert_rules_for_types);
}

我怎样才能在 ruby​​ 上做同样的事情?

4

2 回答 2

2

一个相当字面的重写将是这样的:

rule_arr.each do |r_key, r_value|
  value_arr.each do |v_key, v_value|
    stack_arr.each do |s_key, s_value|
      insert_rules_for_types = "INSERT INTO `rules_for_types`(`types_id`,`rules_id`,`value`,`stackcount`) value('%d','%d','%d','%d')" % [
        type_id.to_i,
        r_value.to_i,
        v_value.to_i,
        s_value.to_i
      ]

      commit_changes(insert_rules_for_types)
    end
  end
end

无论您在 PHP 中做什么,您都可以通过使用范围非常广泛的ActiveRecord或更轻量且更面向插件的Sequel之类的 ORM 来避开构建 SQL 的许多麻烦。

这两个,如果使用得当,将确保你已经正确地转义了你的 SQL。转换为整数是弱转义的标志,因为它不是通用解决方案。

Sequel 对许多 SQL 调用有一个 Ruby 接口,因此INSERT映射为一些直接的代码:

db[:rules_for_types].insert(
  :types_id => types_id,
  :rules_id => rules_id,
  :value => v_value,
  :stackcount => s_value
)

这样做会使将未转义的值注入查询变得非常困难。

于 2012-08-15T14:25:52.840 回答
0

我认为你可以使用 Ruby 的 %. 检查以获取详细信息。

于 2012-08-15T14:12:56.717 回答