我试图从PHP数组中在MySQL表中插入多行。我在其他成员的帮助下设法在一对括号中获取一组值,但是当我尝试插入这个时,我得到“错误:列数与第1行的值计数不匹配”我不知道我哪里错了。我的代码如下:(我得到的值的数量根据用户输入而变化)
$docno1=array();
$serialno = array();
$acc_name = array();
$debit = array();
$credit = array();
for ($i=1;$i<=$rowcount;$i++)
{
//echo 'Accountname'.$i.' :'.($_GET['accname'.$i]).'<br>';
$docno1 [] = ($_GET['docno']);
array_unshift($docno1,"");
unset($docno1[0]);
$serialno [] = $i;
array_unshift($serialno,"");
unset($serialno[0]);
$acc_name[] = ($_GET['accname'.$i]);
array_unshift($acc_name,"");
unset($acc_name[0]);
$debit[] = ($_GET['DrAmount'.$i]);
array_unshift($debit,"");
unset($debit[0]);
$credit[] = ($_GET['CrAmount'.$i]);
array_unshift($credit,"");
unset($credit[0]);
}
$sum_dr = array_sum ($debit);
$sum_cr = array_sum ($credit);
echo ' values of $multi<br>';
$multi = array(
($docno1),
($serialno), //Array for a row of fields
($acc_name),
($debit),
($credit),
($docno1)
);
print_r($multi);
$new = array();
foreach($multi as $key=>$value) {
$new[] = "'".implode("','", $value)."'";
}
echo '<br>Values of $new <br>';
print_r($new);
$query = "(".implode("), (",$new).")";
echo $query.'<br>';
mysql_query("INSERT INTO docitems (`docno`,`itemno`,`accountname`,`debit`,`credit`, `picrefno`) VALUES ".$query.";") or die('Error: ' . mysql_error());
echo "Inserted successfully";
die;
我得到的结果是:
values of $multi
Array
(
[0] => Array
(
[1] => 3434
[2] => 3434
)
[1] => Array
(
[1] => 1
[2] => 2
)
[2] => Array
(
[1] => Lemon
[2] => Kidney Beans
)
[3] => Array
(
[1] => 20
[2] => 10
)
[4] => Array
(
[1] => 0
[2] => 0
)
[5] => Array
(
[1] => 3434
[2] => 3434
)
)
Values of $new
Array
(
[0] => '3434','3434'
[1] => '1','2'
[2] => 'Lemon','Kidney Beans'
[3] => '20','10'
[4] => '0','0'
[5] => '3434','3434'
)
('3434','3434'), ('1','2'), ('Lemon','Kidney Beans'), ('20','10'), ('0','0'), ('3434','3434')
Error: Column count doesn't match value count at row 1
答案 0 :(得分:5)
mysql_query("INSERT INTO docitems (`docno`,`itemno`,`accountname`,`debit`,`credit`, `picrefno`) VALUES ".$query.";") or die('Error: ' . mysql_error());
您正尝试在6个字段中插入内容,以便$query
字符串中必须包含6个值,否则会出现此错误。
你有很多$query
个是2个值。这不是6
答案 1 :(得分:0)
如果在尝试向表中插入行时发生错误,请尝试在插入查询中指定字段列表 - 这样,values
子句中的数据数将与数字匹配期望的栏目。
否则,MySQL需要六列:它需要特定的插入 - 您没有为其指定值。
答案 2 :(得分:0)
在我看来,好像你是以错误的方式映射你的数组。您正在尝试添加两个记录,每个记录包含六个字段,但实际上您在SQL语句中添加的是六个记录,每个记录包含两个字段。
这就是MySQL抱怨的原因 - 因为你告诉它你要更新六个字段,但是在你给它的每个记录中,你只指定了两个字段。
您需要以不同方式构建数组。
我认为$docno1
,$serialno
,$acc_name
,$debit
和$credit
将始终具有相同数量的数组元素(它来自您的你假设这个代码,所以我会按照你的假设跟着你。)
在这种情况下,您需要构建类似这样的数组:
$multi = array();
foreach($docno1 as $key=>value) {
$multi[] = array(
$docno1[$key],
$serialno[$key], //Array for a row of fields
$acc_name[$key],
$debit[$key],
$credit[$key],
$docno1[$key])
}
使用此代码替换代码中设置$multi
的块,您的程序应该可以正常工作。
看看print_r($multi)
现在的样子,你会看到差异。
(请注意,编写整个程序的方法比这更有效,但我专注于为您提供这个特定位的直接替换,以帮助向您显示出错的地方,而不仅仅是为你重写整个程序)
希望这有帮助。