PHP:迭代多个数组并构建SQL INSERT查询

时间:2014-05-12 13:36:45

标签: php mysql

我有获取多个数组的PHP代码:

<?php
$checkKey = $_POST['key'];

if ($key === $checkKey)
{

  $a = array_values($_POST['a']);
  $b = array_values($_POST['b']);
  $c = array_values($_POST['c']);
  $d = array_values($_POST['d']);

  if ( (count($a) !== count($b)) || (count($a) !== count($c)) || (count($a) !== count($d)) )
  {
    die ('Not enough parameters!');
  }
  else
  {

  }


}
?>

我想迭代所有数组,构建一个SQL INSERT查询,如下所示:

INSERT INTO xyz (a,b,c,d) VALUES (1,2,3,4), (4, 5, 6, 7);

值存储在每个数组中(即在此示例中a包含值1和4,b包含值2和5等)

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

只需使用for()循环来迭代从0count($a)的索引(您可以使用任何数组,它们检查的大小相同)。

$sql = 'insert into xyz (a, b, c, d) values ';
for ($i = 0, $l = count($a); $i < $l; ++$i) {
     $sql .= "('".
         // it's really important to escape the input!
         mysqli_real_escape_string($link, $a[$i]).','.
         mysqli_real_escape_string($link, $b[$i]).','.
         mysqli_real_escape_string($link, $c[$i]).','.
         mysqli_real_escape_string($link, $d[$i]).
     "'), ";
}
$sql = substr($sql, 0, -2); // trim down the last ', '

答案 1 :(得分:1)

使用它:

function transpose($array) {
    array_unshift($array, null);
    return call_user_func_array('array_map', $array);
}
//example
$a=array(1,3);
$b=array(2,4);
$c=array(5,4);
$d=array(10,12);

$r= transpose(array($a,$b,$c,$d));
$sql='INSERT INTO xyz (a,b,c,d) VALUES ';
foreach($r as $values){
$sql.='('.implode(',',$values).'),';
}
$sql=rtrim($sql,',');
echo $sql;

答案 2 :(得分:0)

我认为没有内置的php功能,所以你可以这样做:

<?PHP

$count = count($a);
$sqlout = 'INSERT INTO xyz (a,b,c,d) VALUES ';

for($i=0; $i<$count; $i++)
{
   $sqlout .= ( $i>0 ? ',' : '') . '('. $a[$i] .', '. $b[$i] .', '. $c[$i] .', '. $d[$i] .') ';
}


?>

并确保转义输入以避免SQL注入!

答案 3 :(得分:0)

简单循环

<?php
$checkKey = $_POST['key'];

if ($key === $checkKey)
{

    $a = array_values($_POST['a']);
    $b = array_values($_POST['b']);
    $c = array_values($_POST['c']);
    $d = array_values($_POST['d']);

    if ( (count($a) !== count($b)) || (count($a) !== count($c)) || (count($a) !== count($d)) )
    {
        die ('Not enough parameters!');
    }
    else
    {
        $sql_array = array();
        foreach($a AS $key=>$values)
        {
            $sql_array[] = "(".(int)$a[$key].",".(int)$b[$key].",".(int)$c[$key].",".(int)$d[$key].")";
        }
        if (count($sql_array) > 0)
        {
            $sql = "INSERT INTO xyz (a,b,c,d) VALUES ".implode(",", $sql_array);
            // Execute it here
        }
    }


}
?>