“转换连接的”;列表“;从php到ruby
我不知道如何在ruby上做同样的事情: 在php中,我可以使用以下结构:“转换连接的”;列表“;从php到ruby,php,ruby,Php,Ruby,我不知道如何在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_fo
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上做同样的事情呢?我想你可以使用ruby的%。查看详细信息。对其进行相当文字化的重写如下:
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做什么,您都可以通过使用ORM(比如范围非常广泛的ORM,或者更轻、更面向插件的ORM)来避免构建SQL的麻烦
如果正确使用这两种方法,将确保您正确地转义了SQL。强制转换为整数是弱转义的标志,因为它不是通用解决方案
Sequel有一个Ruby接口来支持许多SQL调用,因此INSERT
映射为一些直接的代码:
db[:rules_for_types].insert(
:types_id => types_id,
:rules_id => rules_id,
:value => v_value,
:stackcount => s_value
)
这样做会很难将未替换的值注入到查询中。很抱歉,我认为您不理解这个问题,它不是字符串连接,而是“列表”连接。这部分:虽然((list($r_key,$r_value)=每个($rule_arr))&(list($v_key,$v_value)=每个($value_arr))&($list($s_key,$s_value)=每个($stack_arr)),我知道如何为一个列表创建它:rule_arr。每个{rule | r| key,r_value=rule}-它确实很简单,但我不知道如何在一瞬间做3次哈希。