PHP PDO trong khi tìm nạp
Có một biến bên trong câu lệnh đã chuẩn bị, bạn không bao giờ nên đặt các biến trực tiếp vào câu lệnh, hãy sử dụng trình giữ chỗ và chuyển biến bằng cách sử dụng bindParam Show
Bạn đang ghi đè các biến $query và $row từ bên ngoài vòng lặp, điều này sẽ khiến nó ngừng lặp qua các hàng của truy vấn đầu tiên
Khi gọi hàm fetchAll(), bạn nhận được một mảng mà bạn phải lặp qua, nhưng trong mã của bạn, bạn không lặp qua mảng đó, thay vào đó, bạn đã gọi phương thức tìm nạp() chỉ lấy hàng đầu tiên
Các câu lệnh đã chuẩn bị chỉ phải được chuẩn bị một lần, việc chuẩn bị nó bên trong vòng lặp là không hiệu quả
Tôi đã sửa mã của bạn, bạn nên sử dụng các tên biến mô tả hơn để bạn không ghi đè lên chúng function cart_display() { global $db; // Get IP address $ip = getIp(); // Prepare the cart statement $cart_query = $db->prepare('SELECT p_id FROM cart WHERE ip_add = :ip'); $cart_query->bindParam(':ip', $ip); // Execute the statement $cart_query->execute(); // Prepare the next statement to be used in the loop $product_id = ''; // Initialize variable $product_query = $db->prepare("SELECT * FROM product where product_id = :product_id"); $product_query->bindParam(':product_id', $product_id); // Loop through results of the first query and execute the second query while($cart = $cart_query->fetch(PDO::FETCH_ASSOC)) { // Thanks to the magic of bound parameters // $product_id is automatically passed into the query $product_id = $cart['p_id']; $product->execute(); // Loop through products while($product = $product_query->fetch(PDO::FETCH_ASSOC)) { // Print a table row with product values echo " |