从表中获取数据并从while循环插入另一个表

时间:2017-09-10 14:35:53

标签: php mysql cookies

我在使用while循环从表中获取数据时遇到了一些问题。我想做的很简单我想从table cart获取来自table orders的cookie值的所有数据,该值与cookie值匹配,查询表cart提取与cart表中的cookie值匹配的数据,将它们放在table orders_final This is table cart中。现在这是This is table orders。现在查询购物车表格中的最后一部分,从订单表中获取了cookie值,我现在想要将数据放入orders_final表中,其中所有匹配来自订单和购物车的cookie值THE PROBLEM IS THAT IT ONLY INSERTS ONE VALUE INTO TABLE ORDERS_FINAL

$zomo = $_COOKIE['shopa']; // this is the cookie that is stored in the cart table and updated when the transaction is successful
$get_products = "SELECT * FROM `cart` WHERE cookie_value = '$zomo'";
$limo = mysqli_query($con, $get_products);

while($colo = mysqli_fetch_array($limo)){
    $product_id = $colo['product_id'];
    $order_quantity = $colo['order_quantity'];
    $cookie_value = $colo['cookie_value'];
    //var $dance is when i update the table with data after payment and data gotten from my payment processing company
    $dance = "UPDATE `orders` SET `status`='$r_status',`time`='$r_time',`date`='$r_date',`reference`='$r_reference',`transaction_status`='$r_transaction_status',`transaction_method`='$r_transaction_method',`final_price`='$r_final_price',`order_id`='$r_order_id',`currency`='$r_currency',`referrer`='$r_referrer' WHERE cookie_bought = '$zomo'";
    $uii = mysqli_query($con, $dance);

    if ($uii){
        //this variable insert is where i want to insert all data gotten from cart table above and insert into orders_final, where order table holds the cookie value which was created during shopping which is cookie name shopa held in the variable zomo
        $insert = "INSERT INTO `orders_final`(`product_id`, `cookie_value`, `trx_id`, `order_quantities`) VALUES ('$product_id','$zomo','$r_reference','$order_quantity')"; 
        $bena = mysqli_query($con, $insert);    

        if ($bena){
            $delc = "DELETE FROM `cart` WHERE cookie_value = '$zomo'";
            $tipee = mysqli_query($con, $delc);

            if ($tipee){
                perform_success();  
            }   
        }       
    }
}

1 个答案:

答案 0 :(得分:1)

更好的方法是运行更少的查询,执行更多操作。您可以使用INSERT INTO...SELECT查询,而不是选择整个表并循环遍历它以运行最多3个查询每次迭代(这很快会成为很多查询!)。使用事务,还可以确保在提交更改之前一切都通过 - 因此您最终不会删除未正确传输的内容。

下面的代码已被更改,以减少查询量至少三(并且没有循环!),并且已实现预准备语句的使用。

$stmt = $con->prepare("INSERT INTO orders_final (`product_id`, `cookie_value`, `trx_id`, `order_quantities`) 
                                            SELECT product_id, ?, order_quantity, ? 
                                            FROM cart
                                            WHERE cookie_value=?");
$stmt->bind_param("sss", $zomo, $r_reference, $zomo);
if ($stmt->execute()) {
    $stmt->close();

    $stmt = $con->prepare("UPDATE orders 
                            SET status=?, time=?, date=?, reference=?, transaction_status=?, 
                                 transaction_method=?, final_price=?, order_id=?, 
                                 currency=?, referrer=?
                            WHERE cookie_bought=?");
    $stmt->bind_param("sssssssssss", $r_status, $r_time, $r_date, $r_reference, $r_transaction_status, $r_transaction_method, $r_final_price, $r_order_id, $r_currency, $r_referrer, $zomo);

    $dance = "UPDATE `orders` SET `status`='$r_status',`time`='$r_time',`date`='$r_date',
    `reference`='$r_reference',`transaction_status`='$r_transaction_status',`transaction_method`='$r_transaction_method',`final_price`='$r_final_price',`order_id`='$r_order_id',`currency`='$r_currency',`referrer`='$r_referrer' WHERE cookie_bought = '$zomo'";

    $stmt = $con->prepare("DELETE FROM cart WHERE cookie_value=?");
    $stmt->bind_param("s", $zomo);
    $stmt->execute();
    $stmt->close();
}