【问题标题】:MYSQLI INSERT MULTIPLE ROWSMYSQLI 插入多行
【发布时间】:2014-06-10 11:26:22
【问题描述】:

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

我正在尝试从购物车表中取出一个商品,并将每一行插入到订单表中。他们提交订单后,它应该执行操作。这是我的代码。

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 件商品,它仍然只进入其中一项。

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

这是我的桌子:

( cart_id int(11) NOT NULL AUTO_INCREMENT, product_id int(11) NOT NULL, merse_id int(11) NOT NULL, date_added varchar(255) NOT NULL, date_submited varchar(250) NOT NULL, PRIMARY KEY ( cart_id ), KEY cart_id ( cart_id ( cart_id ( cart_id`) ) ENGINE=InnoDB 默认字符集=latin1 AUTO_INCREMENT=153 ;

如果不存在则创建表orders ( order_id int(11) NOT NULL AUTO_INCREMENT, order_number int(11) 非空, members_id int(11) 非空, product_id int(11) 非空, quantity int(11) 非空, date_submitted varchar(256) 非空, 主键 (order_id), 唯一键 order_number (order_number) ) ENGINE=InnoDB 默认字符集=latin1 AUTO_INCREMENT=422 ;`

【问题讨论】:

  • 你没有提到你的问题。
  • 对不起,我更新了我的帖子。但我的问题是,即使我的购物车中有 4 件商品,它也只会将其中一件插入到订单表中。
  • 删除$stmt->close(); 怎么样?
  • 你认为 for 循环在做什么?似乎毫无意义。
  • 我试图删除 $stmt-close();部分,并且循环似乎不起作用。这就是我寻求帮助的原因。

标签: php mysqli insert


【解决方案1】:

如果没有看到数据库架构,我无法确定,但我怀疑这与您在while 循环中使用for 循环有关。这将尝试使用完全相同的值 $cartOrder_total 次执行完全相同的 INSERT

只需删除 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 个值吗?打印 $cartOrder_total
  • 返回 5,这是我购物车中的商品总数。
  • order_number 是唯一的,你用随机值填充它(这和你在 while 循环之前设置的一样)。
  • 天哪!博扬,这就是问题所在!我不敢相信我忽略了这一点。我现在觉得自己好傻。谢谢你,谢谢你,谢谢你!!!我欠你的,我就是这个意思。我是一名优秀的设计师,但仍在学习后端。需要任何东西,说出它的名字!
【解决方案2】:

您看到通过INSERT 到达的哪一行是您的迭代问题的线索。或者,您可以添加 ECHO,然后查看您正在移动的数据。

如果您只看到提交的第一行数据,这表明您没有遍历外部循环的数据。

如果您只看到提交的最后一行数据,那么这表明您已经跳到外部数据的最后一行,而不是遍历每个数据。

【讨论】:

  • 它只在查询中插入第一项。然后停下来。
  • 尝试使用 fetch() 而不是 fetch assoc()。试试这个参考:php.net/manual/en/mysqli-stmt.bind-result.php
  • 没有帮助。可悲的是:/
  • 没有绑定结果和获取,我不知道该建议什么。模式:init、prepare、bind-param、execute、bind-result 和 close,是很常见的。稍后嵌套执行和绑定结果以及结果处理。
  • 输入正常的order_number,一路都是一样的,不可能是唯一的。
猜你喜欢
  • 2013-10-31
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多