MYSQLI INSERT MULTIPLE ROWS

时间:2014-06-10 11:26:23

标签: php mysqli insert

这是我的第一篇文章,希望有人可以帮我解决我遇到的这个问题。

我试图从购物车表中取出商品,然后将每一行插入订单表。提交订单后,应执行操作。这是我的代码。

if(isset($_GET['submitOrder'])) {
   $timedate = $currentTime." at ".$currentDate;
   $order_number = rand(10,100);
   $cartOrder=$mysqli->query("SELECT * FROM cart WHERE members_id='".$members_id."'");
   $cartOrder_total = $cartOrder->num_rows;
   while($row=mysqli_fetch_assoc($cartOrder)) {
         $stmt = $mysqli->prepare("INSERT INTO orders(order_number, members_id, product_id, quantity, date_submitted) VALUES (?, ?, ?, ?, ?)");
         $stmt->bind_param('siiis', $order_number, $members_id, $row['product_id'], $row['quantity'], $timedate);
         $stmt->execute(); 
         $stmt->close();
   }
   header('Location: cart.php#orderplaced');
}

我的问题是它只在插入表中插入一个条目。即使购物车中有4件商品,它仍然只能进入购物车。

如果有人能指出我正确的方向,我会很感激!它现在只进入一行,我不知道为什么。

以下是我的表格:

CREATE TABLE IF NOT EXISTS( cart_id int(11) NOT NULL AUTO_INCREMENT, PRODUCT_ID int(11) NOT NULL, members_id int(11) NOT NULL, int(11) NOT NULL, DATE_ADDED varchar(255) NOT NULL, date_submitted varchar(250) NOT NULL, PRIMARY KEY ( cart_id ), KEY {cart_id {1}} cart_id`) )ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 153;

CREATE TABLE IF NOT NOT EXISTS ((   orders int(11)NOT NULL AUTO_INCREMENT,   order_id int(11)NOT NULL,   order_number int(11)NOT NULL,   members_id int(11)NOT NULL,   product_id int(11)NOT NULL,   quantity varchar(256)NOT NULL,   PRIMARY KEY(date_submitted),   独特的钥匙order_idorder_number) )ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 422;`

2 个答案:

答案 0 :(得分:0)

在没有看到数据库模式的情况下我无法确定,但我怀疑这与您在for循环中使用while循环有关。这将尝试使用完全相同的INSERT次完全相同的$cartOrder_total

只需删除for循环,即可:

while($row=mysqli_fetch_assoc($cartOrder)) {
     $stmt = $mysqli->prepare("INSERT INTO orders(order_number, members_id, product_id, quantity, date_submitted) VALUES (?, ?, ?, ?, ?)");
     $stmt->bind_param('siiis', $order_number, $members_id, $row['product_id'], $row['quantity'], $timedate);
     $stmt->execute(); 
     $stmt->close();        
}

答案 1 :(得分:-1)

您通过INSERT看到的哪一行是您的迭代问题的线索。或者,您只需添加一个ECHO,然后查看您要移动的数据。

如果您只看到提交的第一行数据,那就是一条线索,您不会遍历外部循环的数据。

如果你只看到提交的最后一行数据,那么你就可以跳到外部数据的最后一行,而不是遍历每一行。