Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL INSERT-使用带有query&;的for()循环;非设定值是否作为“插入”&引用;默认情况下?_Php_Mysql_Arrays_For Loop - Fatal编程技术网

Php MySQL INSERT-使用带有query&;的for()循环;非设定值是否作为“插入”&引用;默认情况下?

Php MySQL INSERT-使用带有query&;的for()循环;非设定值是否作为“插入”&引用;默认情况下?,php,mysql,arrays,for-loop,Php,Mysql,Arrays,For Loop,我有两个数组,其设置值介于1到5之间。我想将这些值插入到一个包含两列的表中 这是我当前的问题,在另一个问题中给出: INSERT INTO table_name (country, redirect) VALUES ('$country[1]', '$redirect[1]'), ('$country[2]', '$redirect[2]'), ('$country[3]', '$redirect[3]'), ('$country[4]', '$r

我有两个数组,其设置值介于1到5之间。我想将这些值插入到一个包含两列的表中

这是我当前的问题,在另一个问题中给出:

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个值),这肯定是不确定的如果值为空/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);
}
这样做会更好吗?会不会对资源造成更大的负担?

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);
}

对于($i=0,$size=$sizeof($country);$i执行以下操作:

$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";

这将动态构建values部分,跳过任何未设置的部分。但是,请注意,mysql查询字符串有一个长度限制,由max_allowed_packet设置设置。如果要构建“大”查询,如果超过此限制,则必须将其拆分为多个较小的查询。

执行以下操作:

$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";

这将动态地构建values部分,跳过任何未设置的部分。但是,请注意,mysql查询字符串有一个长度限制,由max_allowed_数据包设置。如果您要构建一个“巨大的”查询时,如果超过此限制,则必须将其拆分为多个较小的查询。

如果您询问php是否会自动跳过在查询中插入值(如果值为null或0),答案是否。为什么不在各国之间循环,如果它们有匹配的重定向,则包括insert语句的该部分..som如下:(未测试,仅显示一个示例)。这是一个查询,所有值。您还可以合并一些检查,如果它们不存在,则默认为null

 $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);
$query=“将名称(国家,重定向)值插入表中”;

对于($i=0,$size=$sizeof($country);$i如果您询问如果查询值为null或0,php是否会自动跳过在查询中插入值,答案是否。为什么不在国家之间循环,如果它们有匹配的重定向,则包括insert语句的该部分..类似这样:(未测试,仅显示一个示例)。这是一个查询,所有值。您还可以合并一些检查,如果它们不存在,则默认为null

 $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);
$query=“将名称(国家,重定向)值插入表中”;

对于($i=0,$size=$sizeof($country)$i您是在清理输入以防止SQL注入吗?是的,抱歉,我没有说清楚。您是在清理输入以防止SQL注入吗?是的,抱歉,我没有说清楚。谢谢,我正在寻找的是,我将根据我的需要进行调整,因为我已经获得了您以不同方式构建的前半段代码,底线是创建一个包含所有
值的数组,然后用逗号内爆每个数组值,然后将其作为单个字符串插入?是的。这也会处理缺少的对选项,因为它们从一开始就不会被添加到这个新的临时数组中。谢谢,正是我在寻找的,我会根据我的需要对其进行调整,就像我一样我们已经以不同的方式构建了前半部分代码,底线是创建一个包含所有
值的数组,然后用逗号内爆每个数组值,然后将其作为单个字符串插入?是的。这也会处理缺少的对选项,因为它们永远不会添加到这个新的临时数组中首先。