PHP 数组作为单独的行插入 MySQL 表

Posted

技术标签:

【中文标题】PHP 数组作为单独的行插入 MySQL 表【英文标题】:PHP Array insert into MySQL table as individual rows 【发布时间】:2011-10-17 01:04:30 【问题描述】:

我正在尝试从 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

【问题讨论】:

这是一个 SQL 错误,不是吗?我们可以看到完整的声明吗?如果生成的 SQL 无效,则与 PHP 无关。 【参考方案1】:
 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 来解释错误告诉他什么,但我不认为它说明了整个故事;问题的根本原因是他的数组弄错了(6x2 而不是 2x6 元素);请参阅我的答案以获取对此的解释和一些代码,以帮助他了解哪里出错了。 :)【参考方案2】:

在我看来,好像您正在以错误的方式映射数组。您正在尝试添加两条记录,每条记录有六个字段,但您实际放入 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)现在的样子,你就会发现不同。

(请注意,编写整个程序的方法比这更有效,但我专注于为您提供这个特定位的直接替换,以帮助您向您展示哪里出了问题,而不是简单地为你重写整个程序)

希望这会有所帮助。

【讨论】:

Hooooooooooo Hoo!,我无话可说,谢谢。你解开了这个谜。干杯【参考方案3】:

如果在尝试向表中插入行时发生错误,请尝试在插入查询中指定字段列表——这样,values 子句中的数据数量将与预期的数量相匹配列。

否则,MySQL 需要六列:它需要特定的插入——您没有为其指定值。

【讨论】:

以上是关于PHP 数组作为单独的行插入 MySQL 表的主要内容,如果未能解决你的问题,请参考以下文章

php中一个二维数组,怎么吧数组中的数据作为value插入到数据库某个表中

如何将php数组插入mysql表

PHP PHP:使用数组将数据插入MySQL表[mysql] [php] [array] [INSERT]

JSON / PHP数组到MYSQL插入[关闭]

PHP:使用数组[MySQL][PHP][Array][Insert]将数据插入MySQL表

如何在 php 中将数组值作为键值对插入到数据库表中