【问题标题】:PHP Array insert into MySQL table as individual rows.PHP 数组作为单独的行插入 MySQL 表。
【发布时间】:2011-07-30 23:43:37
【问题描述】:

我想使用 php 在 mysql 表中插入多行。数据在数组中,我正在尝试使用以下代码,但它不起作用。请帮帮我。

查询字符串为:

new_document.php?doctype=Inv&paytype=u&docno=3&bookno=31&prname=40329&pename=1001&paydate=07%2F22%2F2011&indate=7%2F30%2F2011&accname1=Man+Site&DrAmount1=20&CrAmount1=1&accname2=Man+Site&DrAmount2=0&CrAmount2=5&ref=Jul%2F2011

    $rows = explode("&", $_SERVER['QUERY_STRING']);
    $rowcount =((count($rows)-9)/3); // Count set of rows received , 9 is the costant no of inputs 

    $serialno = array();
    $acc_name = array();
    $debit = array();
    $credit = array();

    $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]);



    echo 'Serial Numbers : '.print_r($serialno);
    echo '<br>A/C Names : '.print_r($acc_name);
    echo '<br>Debit Amount : '.print_r($debit);
    echo '<br>Credit Amount : '.print_r($credit);

    This gives me following result :
    ARRAY
    (
    [1] => 1
    [2] => 2
    )
    SERIAL NUMBERS : 1ARRAY
    (
    [1] => MAN SITE
    [2] => MAN SITE
    )

    A/C NAMES : 1ARRAY
    (
    [1] => 20
    [2] => 0
    )

    DEBIT AMOUNT : 1ARRAY
    (
    [1] => 1
    [2] => 5
    )

    CREDIT AMOUNT : 1


    for ($i=1;$i=$rowcount;$i++)
    {
    $amount = ($debit[$i]-$credit[$i]);
    $accname=$acc_name[$i];

    $insert2 = "INSERT INTO `khata2`.`docitems` 
    (
    `dateinput`,
    `docno`, 
    `itemno`, 
    `accountname`, 
    `amount`, 
    `picrefno`, 
    `updatestamp`)
    VALUES (
    NOW(''), 
    '$docno', 
    '$i', 
    '$accname', 
    '$amount', 
    '$docno', 
    Null)";      
    }
    if (!mysql_query($insert2)){
    echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>';

    die('Error: ' . mysql_error());
    break;
    }
    echo '<br><a style="color:GREEN">'.$rowcount.' </a>record inserted.'; 
    exit();


    RESULTS AS :
    Fatal error:  Maximum execution time of 30 seconds exceeded in F:\server\htdocs\xampp\Khata2\processor\new_document.php on line 184 ( Line 184 is  '$amount',)

【问题讨论】:

    标签: php mysql arrays insert


    【解决方案1】:

    忽略这是非常不安全的事实,这是您的问题:

    for ($i=1;$i=$rowcount;$i++)

    这应该是:

    for ($i=1;$i&lt;$rowcount;$i++)

    现在您将 $rowcount 分配给 $i,它始终为 true,因此 for 循环永远不会终止。

    【讨论】:

    • 非常感谢您的回复。它现在可以工作,但只在数组中插入最后一组值。知道我在做什么错吗?干杯(对不起,我很痛苦)还有什么方法我可以用来获得想要的结果?
    • 您可能会跳过第一个,因为 PHP 索引数组从 0 开始,而不是 1。所以将 for 循环更改为从 0 开始。
    【解决方案2】:

    1) 你这样做:

    for ($i=1;$i<=$rowcount;$i++){
         //generate query
    }
    //do query
    

    但你需要:

    for ($i=1;$i<=$rowcount;$i++){
         //generate query
         //do query
    }
    

    2) 对每一行执行 1 次查询可能比 1 次查询更快:
    您可以使用以下语法:

    INSERTY INTO table(field1,field2) VALUES(v11,v12),(v21,v22),(v31,v32);
    
    $insert2=array();
    for ($i=1;$i=$rowcount;$i++)
    {
        $amount = ($debit[$i]-$credit[$i]);
        $accname=$acc_name[$i];
    
        $insert2[] = "(
        `dateinput`,
        `docno`, 
        `itemno`, 
        `accountname`, 
        `amount`, 
        `picrefno`, 
        `updatestamp`)
        VALUES (
        NOW(''), 
        '$docno', 
        '$i', 
        '$accname', 
        '$amount', 
        '$docno', 
        Null)";      
    }
    if (!mysql_query('INSERT INTO tblname VALUES'.implode(',',$insert2))){
        echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>';
    
        die('Error: ' . mysql_error());
        break;
    }
    

    3) 带有准备好的语句的 PDO 或 mysqli 很棒;)

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2016-06-16
      • 2013-10-12
      • 2016-09-25
      • 2020-12-31
      • 2014-12-02
      • 2023-03-16
      • 2015-11-11
      • 2013-11-30
      相关资源
      最近更新 更多