【问题标题】:Inserting values in mysql from an array using PHP使用 PHP 在 mysql 中从数组中插入值
【发布时间】:2016-10-27 09:02:00
【问题描述】:

我对此有点挣扎。希望有人能指导我一点。

我正在尝试获取 mysql 中的购物车篮产品(在这种情况下不是会话)并将它们移动到结帐时的“订单详细信息”表中。

产品数组创建正常并正确输出键和值,但我的问题是当我尝试将数组值插入另一个表时。

代码如下:

$cart_products = array(); 
$stmt = $conn->prepare("SELECT 
SUM(co.cart_quantity) AS quantity, 
p.product_id, 
p.product_name, 
SUM(p.product_price) AS price, 
p.short_description, 
SUM(p.product_weight) AS weight, 
p.vat 

FROM cart_orders AS co 
LEFT JOIN products AS p 
ON co.cart_product_id = p.product_id 
LEFT JOIN vat_rates AS vr 
ON p.vat = vr.vat_id 
WHERE cart_user_id = ? 
GROUP BY co.cart_product_id 
ORDER BY co.cart_product_id"); 


$stmt->bind_param('i', $user_id); 
$stmt->bind_result($quantity,$p_product_id,$p_product_name,$price,$p_short_description,$weight,$p_vat); 
$stmt->execute(); 
$stmt->store_result(); 
if($stmt->num_rows() > 0){ 
while ($stmt->fetch()) { 

$cart_products[] = array( 
    "product_id" => $p_product_id, 
    "product_name" => $p_product_name, 
    "product_quantity" => $quantity, 
    "product_price" => $price, 
    "vat_id" => $p_vat 
); 
}} 
$stmt->free_result(); 
$stmt->close(); 


$stmt = $conn->prepare("INSERT INTO order_details(product_id,product_name,product_quantity,product_price,vat_id)
VALUES (?,?,?,?,?)");
$stmt->bind_param('isiii', $cart_products['product_id'],$cart_products['product_name'],$cart_products['product_quantity'],$cart_products['product_price'],$cart_products['vat_id']);
$stmt->execute();
$stmt->close();  

这是我的数组 $cart_products 的输出:

Array 
( 
    [0] => Array 
        ( 
            [product_id] => 5 
            [product_name] => Product A 
            [product_quantity] => 20 
            [product_price] => 2.50 
            [vat_id] => 2 
        ) 

    [1] => Array 
        ( 
            [product_id] => 7 
            [product_name] => Product A 
            [product_quantity] => 10 
            [product_price] => 2.50 
            [vat_id] => 1 
        ) 

    [2] => Array 
        ( 
            [product_id] => 9 
            [product_name] => Product A44544 
            [product_quantity] => 3 
            [product_price] => 2.50 
            [vat_id] => 2 
        ) 

)  

提前感谢您的帮助!

【问题讨论】:

  • 或许这个问题可以帮到你stackoverflow.com/questions/10054633/…
  • BennyBoy 的代码有错误。最后bind_param。我在 Deniz Aktürk 添加的问题或重复中看不到任何类似的内容。
  • @BennyBoy 您可以使用INSERT INTO... SELECT 将您的值直接插入到另一个表中。 stackoverflow.com/a/37741763/3595565 如果您不必验证您在 php 中选择的产品数据,这将是处理您的案例的好方法
  • 我已经编辑了我的第一篇文章,我相信这会更好。
  • @Philipp,感谢 Phillip 的提示,我正在尝试理解您向我展示的示例的合成器。对您的问题,如果选择插入在某些时候失败,交易是否仍然可以撤销?因为我有多个查询,并希望将它们全部放入一个事务中。谢谢。

标签: php mysql arrays mysqli


【解决方案1】:

您必须遍历您的 $cart_products 才能访问每个产品。

$cart_products = array();
if ($stmt->num_rows() > 0) {
    while ($stmt->fetch()) {
        $cart_products[] = array(
            "product_id" => $p_product_id,
            "product_name" => $p_product_name,
            "product_quantity" => $quantity,
            "product_price" => $price,
            "vat_id" => $p_vat
        );
    }
}
$stmt->free_result();
$stmt->close();


$stmt = $conn->prepare("INSERT INTO order_details(product_id,product_name,product_quantity,product_price,vat_id)
VALUES (?,?,?,?,?)");

foreach ($cart_products as $cart_product) {
    $stmt->bind_param('isiii', $cart_product['product_id'], $cart_product['product_name'], $cart_product['product_quantity'], $cart_product['product_price'], $cart_product['vat_id']);
    $stmt->execute();
}

【讨论】:

  • 非常感谢,是的!有道理.......现在明白了,我刚试过,效果很好!我真的很感谢这里每个人的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 2019-07-06
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多