我有两个数组,其中包含1到5个设置值。我想将这些值插入到包含两列的表中。
这是我当前的查询,在另一个SO问题中给我:
INSERT INTO table_name (country, redirect)
VALUES ('$country[1]', '$redirect[1]'),
('$country[2]', '$redirect[2]'),
('$country[3]', '$redirect[3]'),
('$country[4]', '$redirect[4]'),
('$country[5]', '$redirect[5]')
ON DUPLICATE KEY UPDATE redirect=VALUES(redirect)
我有点担心如果没有设置其中一些数组值会发生什么,因为我相信上面假设有5组值(总共10个值),这肯定是不确定的。 如果值为null / 0会自动跳过它吗?
这样的事情会更好吗,会不会对资源造成太大的负担呢?
for($i = 0, $size = $sizeof($country); $i <= size; $i++) {
$query = "INSERT INTO table_name (country, redirect) VALUES ('$country[$i]', '$redirect[$i]) ON DUPLICATE KEY UPDATE redirect='$redirect[$i]'";
$result = mysql_query($query);
}
粗体;中突出显示的问题。任何答案都将非常感谢:) :) !!
答案 0 :(得分:1)
做这样的事情:
$vals = array()
foreach($country as $key => $country_val) {
if (empty($country_val) || empty($redirect[$key])) {
continue;
}
$vals[] = "('" . mysql_real_escape_string($country_val) . "','" . mysql_real_escape_string($redirect[$key]) . "')";
}
$val_string = implode(',', $vals);
$sql = "INSERT INTO .... VALUES $val_string";
这将动态构建值部分,跳过任何未设置的部分。但请注意,mysql查询字符串有一个长度限制,由max_allowed_packet设置设置。如果您正在构建“巨大”查询,则必须将其拆分为多个较小的查询(如果超出此限制)。
答案 1 :(得分:0)
如果你问php是否会自动跳过将值插入查询中,如果它是null或0,答案是否定的。为什么不循环遍历各个国家/地区,如果它们具有匹配的重定向,则包含插入语句的那一部分......就像这样:(未经过测试,仅显示示例)。这是一个查询,所有值。如果它们不存在,您还可以将某些检查或默认值合并为空。
$query = "INSERT INTO table_name (country, redirect) VALUES ";
for($i = 0, $size = $sizeof($country); $i <= size; $i++) {
if(array_key_exists($i, $country && array_key_exists($i, $redirect)
if($i + 1 != $size){
$query .= "('".$country[$i]."', '".$redirect[$i]).",";
} else $query .= "('".$country[$i]."', '".$redirect[$i].")";
}
}
$query .= " ON DUPLICATE KEY UPDATE redirect=VALUES(redirect);"
$result = mysql_query($query);