Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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:迭代多个数组并构建SQL插入查询_Php_Mysql - Fatal编程技术网

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

PHP:迭代多个数组并构建SQL插入查询,php,mysql,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))

我有获取多个数组的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
  {

  }


}
?>
其中,值存储在每个数组中(即,在本例中,a包含值1和4,b包含值2和5等)

如何实现这一点?

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

$sql='插入xyz(a、b、c、d)值';
对于($i=0,$l=count($a);$i<$l;+$i){
$sql.=“(”)。
//逃避输入真的很重要!
mysqli_real_escape_字符串($link,$a[$i])。,”。
mysqli_real_escape_字符串($link,$b[$i])。,”。
mysqli_real_escape_字符串($link,$c[$i])。,”。
mysqli_real_escape_字符串($link,$d[$i])。
"'), ";
}
$sql=substr($sql,0,-2);//修剪最后一个“,”

我认为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注入

使用以下命令:

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;
简单循环

<?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
        }
    }


}
?>


Sidenote(一个前瞻):如果你真的有人给你一个有效的答案,一定要记住
key
key
是。我想
$key
是在什么地方定义的?在使用之前,您可能需要检查$a、$b、$c和$d是否已设置(
isset()
),除非您可以保证所有设置都存在。为什么要使用“非等效”
==而不是“不相等”
=比较计数()时?SQL确实有一种数组类型——您正在使用它吗?使用抽象模型、准备好的语句或某种查询生成器会更简单、更简洁。行之间缺少
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;
<?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
        }
    }


}
?>