while循环只查找最后一次迭代

时间:2016-01-18 13:12:23

标签: php mysql pdo while-loop fetch

所以对于学校我正在尝试建立一个网上商店(它是一个项目),对于购物车,我使用数据库,我根据用户获取信息并打印出来。然而,我的while循环只找到最后一项,而不是其他两项。现在我很确定旧的数据被覆盖,因此无法打印,但我不知道如何解决这个问题

这是我到目前为止所得到的:

<?php
if(isset($_SESSION['userid'])){

    $db = new PDO('mysql:host=localhost;dbname=ismsite', 'root', 'e-scooter');
    $result = $db->prepare("SELECT * FROM cart where user_id=:userid ORDER BY cart_id DESC LIMIT 3 ");
    $result->bindParam(':userid', $_SESSION['userid']);
    $result->execute();
    $info = array();

    while($row = $result->fetch(PDO::FETCH_ASSOC)){

        $pid = $row['product_id'];
        $quantity = $row['quantity'];

        $result = $db->prepare("SELECT * FROM Products WHERE productID=:pid");
        $result->bindParam(':pid', $pid);
        $result->execute();

        while($row = $result->fetch(PDO::FETCH_ASSOC)){
            echo $row['naam'];
        }

    }
}
else{

    echo "Je moet inloggen om te kunnen winkelen.";

}
?>

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

你的代码会覆盖像 public ArrayList<Map<Integer, String>> search(final ArrayList<Map<Integer, String>> myMapList, String searchTerm) { ArrayList<Map<Integer, String>> newListOfMaps = new ArrayList<Map<Integer, String>>(); for (Map<Integer, String> map : myMapList) { if (map.toString().contains(searchTerm)) { newListOfMaps.add(map); } } return newListOfMaps; } 这样的变量。在内部循环中你覆盖$ row和$ result所以你的外部while循环不能正常工作。

myMapList.get(0)= {1=laptop, 2=4, 3=stackover, 4=flow}

答案 1 :(得分:2)

您的变量名称存在冲突。 试试这个:

if(isset($_SESSION['userid'])){
    $db = new PDO('mysql:host=localhost;dbname=ismsite', 'root', 'e-scooter');
    $cart = $db->prepare("SELECT * FROM cart where user_id=:userid ORDER BY cart_id DESC LIMIT 3 ");
    $cart->bindParam(':userid', $_SESSION['userid']);
    $cart->execute();
    $info = array();

    while($row = $cart->fetch(PDO::FETCH_ASSOC)){
        $pid = $row['product_id'];
        $quantity = $row['quantity'];
        $products = $db->prepare("SELECT * FROM Products WHERE productID=:pid");
        $products->bindParam(':pid', $pid);
        $products->execute();

        while($product = $products->fetch(PDO::FETCH_ASSOC)){
              echo $product['naam'];
        }
}

答案 2 :(得分:1)

您应该使用SQL JOIN

尝试这种方式: -

 $db = new PDO('mysql:host=localhost;dbname=ismsite', 'root', 'e-scooter');
             $sql = "SELECT cart.*,Products.* FROM cart 
                    LEFT JOIN Products
                    ON cart.product_id = Products.productID
                    where cart.user_id=:userid ORDER BY cart.cart_id DESC LIMIT 3"; 
                $result = $db->prepare($sql);
                $result->bindParam(':userid', $_SESSION['userid']);
                $result->execute();                   

                while($row = $result->fetch(PDO::FETCH_ASSOC)){
                   echo $row['naam'];
                }

答案 3 :(得分:-1)

使用for循环而不是while循环

for($i = 0, $c = count($result->fetch(PDO::FETCH_ASSOC)); $i < $c; $i++){
    //Do stuff here
}