[英]While loop only finding the last iteration
所以對於學校我正在嘗試建立一個網上商店(這是一個項目),對於購物車我使用數據庫,我根據用戶獲取信息並打印出來。 然而,我的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.";
}
?>
任何人都可以幫我解決這個問題嗎?
你的代碼覆蓋了像$result,$row
這樣的變量。在內部循環中你覆蓋$ row和$ result所以你的外部while循環不能正常工作。
while($row = $result->fetch(PDO::FETCH_ASSOC)){
$pid = $row['product_id'];
$quantity = $row['quantity'];
$result1 = $db->prepare("SELECT * FROM Products WHERE productID=:pid");
$result1->bindParam(':pid', $pid);
$result1->execute();
while($row1 = $result1->fetch(PDO::FETCH_ASSOC)){
echo $row1['naam'];
}
}
您的變量名稱存在沖突。 試試這個:
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'];
}
}
您應該使用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'];
}
使用for循環而不是while循環
for($i = 0, $c = count($result->fetch(PDO::FETCH_ASSOC)); $i < $c; $i++){
//Do stuff here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.