循环遍历数组并为每个值添加到数据库

时间:2014-01-30 22:50:29

标签: php arrays

我有以下代码:

if (count($sales) > 0) {
    foreach ($sales as $sale) {
        //Generate variables
        $user_id = $_SESSION['user_id'];
        $sales_id = $sale['sales_id'];
        $product = $sale['product'];
        $quantity = $sale['quantity'];
        $default_printed = 0;
        $datetime = $_SESSION['session_date']." ".date('G:i:s');

        echo $sales_id.", ".$product.", ".$quantity.", ".$user_id."<br />";

        if ($stmt = $mysqli->prepare("INSERT INTO sales (uid,product,printed,saledatetime,jpgID,quantity) VALUES (?,?,?,?,?,?)")) {
            $stmt->bind_param('isisii',$user_id,$product,$default_printed,$datetime,$sales_id,$quantity);
            $stmt->execute();
            $stmt->close();
        }
    }
}

它应该可以工作,但由于某种原因,它只会在数据库中第一次运行时添加...回声产生以下内容,只是为了证明数组实际上是循环的。

83, KR, 2, 2
84, KR, 1, 2
84, LR, 1, 2
85, KR, 1, 2
86, LR, 2, 2
87, KR, 1, 2
87, LR, 3, 2
89, KR, 2, 2

为什么在后续运行中没有将值添加到数据库中?

3 个答案:

答案 0 :(得分:1)

不要关闭循环内的语句和连接,在完成所有执行后关闭它。你也不需要在循环中“准备”语句。整个想法是你在循环外准备()语句,然后在循环内你只传递值到execute(),一旦循环完成,你关闭()循环:

if (count($sales) > 0) {
    foreach ($sales as $sale) {
        //Generate variables
        $user_id = $_SESSION['user_id'];
        $sales_id = $sale['sales_id'];
        $product = $sale['product'];
        $quantity = $sale['quantity'];
        $default_printed = 0;
        $datetime = $_SESSION['session_date']." ".date('G:i:s');

        echo $sales_id.", ".$product.", ".$quantity.", ".$user_id."<br />";

        if ($stmt = $mysqli->prepare("INSERT INTO sales (uid,product,printed,saledatetime,jpgID,quantity) VALUES (?,?,?,?,?,?)")) {
            $stmt->bind_param('isisii',$user_id,$product,$default_printed,$datetime,$sales_id,$quantity);
            $stmt->execute();

        }
    }
            $stmt->close(); //move close() here
}

答案 1 :(得分:1)

可能后续的insert语句失败,因为数据库约束会阻止插入数据。你是否尝试过一个接一个地“手动”执行这些陈述?

答案 2 :(得分:0)

刚刚检查了数据库,我必须忘记将ID(主键)更改为AUTO_INCREMENT,因此它只是被覆盖了。

干杯!