PHP:迭代多个数组并构建SQL插入查询
我有获取多个数组的PHP代码: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
$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
}
}
}
?>