如何使用PHP PDO将多行数组插入MySQL

如何使用PHP PDO将多行数组插入MySQL,php,mysql,Php,Mysql,我正在尝试使用PHPPDO将多个数组插入MySql数据库。它插入重复的行,而不是按我要求的方式插入。下面是我的代码 HTML 我想在一条记录中插入$proname,$quantity,$est_amount,并且它应该根据插入的值插入多个记录,因为你有一个嵌套的for循环,它肯定会导致重复记录。让我快速更正一下 $totalamount=0; for ($i = 0; $i < count($_POST['pname']); $i++){ $proname = $_POST['pn

我正在尝试使用PHPPDO将多个数组插入MySql数据库。它插入重复的行,而不是按我要求的方式插入。下面是我的代码

HTML


我想在一条记录中插入
$proname,$quantity,$est_amount
,并且它应该根据插入的值插入多个记录

,因为你有一个嵌套的for循环,它肯定会导致重复记录。让我快速更正一下

$totalamount=0;
for ($i = 0; $i < count($_POST['pname']); $i++){
    $proname = $_POST['pname'][$i];
    $quantity = $_POST['pcount'][$i];
    $estamount = $_POST['estamount'][$i];
    $totalamount = $quantity*$estamount;

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO `order`(custname, contact, product_name, quantity, est_amount, advance_paid, delivery_period, date, status, total_amount, orderid) VALUES(:custname, :contact, :product_name, :quantity, :est_amount, :advance_paid, :delivery_period, :date, :status, :total_amount, :orderid)";
    $query=$dbh->prepare($sql);
    $query->bindParam(':custname',$custmorname,PDO::PARAM_STR);
    $query->bindParam(':contact',$contact,PDO::PARAM_STR);
    $query->bindParam(':product_name',$proname,PDO::PARAM_STR);
    $query->bindParam(':quantity',$quantity,PDO::PARAM_STR);
    $query->bindParam(':est_amount',$estamount,PDO::PARAM_STR);
    $query->bindParam(':advance_paid',$advancepaid,PDO::PARAM_STR);
    $query->bindParam(':delivery_period',$delevery,PDO::PARAM_STR);
    $query->bindParam(':date',$date,PDO::PARAM_STR);
    $query->bindParam(':status',$status,PDO::PARAM_STR);
    $query->bindParam(':orderid',$orderid,PDO::PARAM_STR);
    $query->bindParam(':total_amount',$totalamount,PDO::PARAM_STR);
    $query->execute();


}
$totalamount=0;
对于($i=0;$isetAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$sql=“将值(:custname,:contact,:product\u name,:quantity,:est\u amount,:advance\u paid,:delivery\u period,date,status,total\u amount,orderid)插入到“订单”(custname,contact,:product\u name,:quantity,:est\u amount,:advance\u paid,:delivery\u period,:date,:status,:total\u amount,:orderid)”;
$query=$dbh->prepare($sql);
$query->bindParam(':custname',$custmorname,PDO::PARAM_STR);
$query->bindParam(':contact',$contact,PDO::PARAM_STR);
$query->bindParam(':product_name',$proname,PDO::PARAM_STR);
$query->bindParam(':quantity',$quantity,PDO::PARAM_STR);
$query->bindParam(':est_amount',$estamount,PDO::PARAM_STR);
$query->bindParam(':advancepaid',$advancepaid,PDO::PARAM_STR);
$query->bindParam(':delivery_period',$delevery,PDO::PARAM_STR);
$query->bindParam(':date',$date,PDO::PARAM_STR);
$query->bindParam(':status',$status,PDO::PARAM_STR);
$query->bindParam(':orderid',$orderid,PDO::PARAM_STR);
$query->bindParam(':total_amount',$totalamount,PDO::PARAM_STR);
$query->execute();
}

可能重复的问题请仔细阅读我的问题。我有多个数组和多个rowshd,这使得它不重复,因为。。。。???你只写了“这不是我要求的插入方式”,但不是你想要的require@NicoHaase如果您觉得它可能是重复的,最好将其“标记”为一个,而不是将其作为注释输入。当它被标记时,它会出现在某个地方,其他人可能也会在投票结束时发现它。此外,如果我或其他人能一次敲打它,那么也会在上面显示你的名字,而不仅仅是敲打它的人。我只是想让你知道投票结束是怎么回事。我认为你这样做的原因可能是你不能“投票”以重复的方式结束。没错,但你可以把它作为一个复制品来“标记”。我就是这么做的:标记它。那个评论是自动写的
$totalamount=0;
        foreach($_POST['pname'] as $proname){

            foreach($_POST['pcount'] as $quantity){

                foreach($_POST['estamount'] as $estamount){

                    $totalamount = $quantity*$estamount;

                    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $sql = "INSERT INTO `order`(custname, contact, product_name, quantity, est_amount, advance_paid, delivery_period, date, status, total_amount, orderid) VALUES(:custname, :contact, :product_name, :quantity, :est_amount, :advance_paid, :delivery_period, :date, :status, :total_amount, :orderid)";
                    $query=$dbh->prepare($sql);
                    $query->bindParam(':custname',$custmorname,PDO::PARAM_STR);
                    $query->bindParam(':contact',$contact,PDO::PARAM_STR);
                    $query->bindParam(':product_name',$proname,PDO::PARAM_STR);
                    $query->bindParam(':quantity',$quantity,PDO::PARAM_STR);
                    $query->bindParam(':est_amount',$estamount,PDO::PARAM_STR);
                    $query->bindParam(':advance_paid',$advancepaid,PDO::PARAM_STR);
                    $query->bindParam(':delivery_period',$delevery,PDO::PARAM_STR);
                    $query->bindParam(':date',$date,PDO::PARAM_STR);
                    $query->bindParam(':status',$status,PDO::PARAM_STR);
                    $query->bindParam(':orderid',$orderid,PDO::PARAM_STR);
                    $query->bindParam(':total_amount',$totalamount,PDO::PARAM_STR);
                    $query->execute();
                    }
              }
        }
$totalamount=0;
for ($i = 0; $i < count($_POST['pname']); $i++){
    $proname = $_POST['pname'][$i];
    $quantity = $_POST['pcount'][$i];
    $estamount = $_POST['estamount'][$i];
    $totalamount = $quantity*$estamount;

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO `order`(custname, contact, product_name, quantity, est_amount, advance_paid, delivery_period, date, status, total_amount, orderid) VALUES(:custname, :contact, :product_name, :quantity, :est_amount, :advance_paid, :delivery_period, :date, :status, :total_amount, :orderid)";
    $query=$dbh->prepare($sql);
    $query->bindParam(':custname',$custmorname,PDO::PARAM_STR);
    $query->bindParam(':contact',$contact,PDO::PARAM_STR);
    $query->bindParam(':product_name',$proname,PDO::PARAM_STR);
    $query->bindParam(':quantity',$quantity,PDO::PARAM_STR);
    $query->bindParam(':est_amount',$estamount,PDO::PARAM_STR);
    $query->bindParam(':advance_paid',$advancepaid,PDO::PARAM_STR);
    $query->bindParam(':delivery_period',$delevery,PDO::PARAM_STR);
    $query->bindParam(':date',$date,PDO::PARAM_STR);
    $query->bindParam(':status',$status,PDO::PARAM_STR);
    $query->bindParam(':orderid',$orderid,PDO::PARAM_STR);
    $query->bindParam(':total_amount',$totalamount,PDO::PARAM_STR);
    $query->execute();


}