繁体   English   中英

PHP Array作为单独的行插入MySQL表

[英]PHP Array insert into MySQL table as individual rows

我试图从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
 mysql_query("INSERT INTO docitems (`docno`,`itemno`,`accountname`,`debit`,`credit`, `picrefno`) VALUES ".$query.";") or die('Error: ' . mysql_error());

您试图将内容插入6个字段,以便$query字符串中必须包含6个值,否则会出现此错误。

您有很多$query ,它们是2个值。 那不是6

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

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

在我看来,好像您以错误的方式映射数组。 您试图添加两个记录,每个记录有六个字段,但实际上要放入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)是什么样子,您会看到区别。

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM