繁体   English   中英

如何同时从不同表中的数据库中获取数据 PHP MYSQL

[英]How can I Fetch data from database from different tables at the same time PHP MYSQL

我有 2 个相互关联的表。 第一个表是包含(Product_id,product_title 和 product_price)的产品表,另一个是包含(image_id,image_product_title(FK)和image_name)的图像表。 所以在这里我试图获取所有产品及其图像,这样它就会有一个产品,然后在该产品内部有一个产品的多个图像,但我无法以嵌套方式调用 2 个不同的查询。 这是我的代码,因此您可以了解我要做什么...

    $stmt = mysqli_prepare($connection,"SELECT product_id,product_title,product_price FROM products");
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt,$product_id,$product_title,$product_price);
        while(mysqli_stmt_fetch($stmt)){
            
  //HTML PART
            $stmt2 = mysqli_prepare($connection,"SELECT image_id,image_product_title,image_name FROM images WHERE image_product_title = '$product_title'");
            mysqli_stmt_execute($stmt2);
            mysqli_stmt_bind_result($stmt2,$image_id,$image_product_title,$image_name);
                while(mysqli_stmt_fetch($stmt2)){
                echo $image_name;
                } 
  
    //HTML PART
  
            echo $product_id; 
            echo $product_title;
            echo $product_price;
  

//HTML PART
        } 

有没有办法做这样的事情? 主要思想是循环所有产品,在该循环内第二个循环将循环实际产品图像,但产品与图像不在同一个表中,所以我很难以嵌套方式从两个表中获取数据

不要混合 PHP 和 HTML。 首先准备PHP中的数据,然后只在HTML中显示。

一般来说,这种事情用 PDO 会简单得多。 如果还不算太晚,请考虑切换到 PDO。

要解决这个问题,您必须在执行下一条语句之前使用缓冲结果或将所有内容提取到数组/对象中。 如果您必须使用 mysqli 那么这样的事情应该可以完成:

// preparation of a nested array structure with products and their images

$stmt = $connection->prepare('SELECT product_id,product_title,product_price FROM products');
$stmt->execute();
$products = [];
foreach ($stmt->get_result() as $row) {
    $products[$row['product_id']] = $row;
}

$stmt = $connection->prepare('SELECT image_id,image_product_title,image_name FROM images');
$stmt->execute();
foreach ($stmt->get_result() as $image) {
    $products[$image['product_id']][] = $image;
}

然后在 HTML 中输出这个是小菜一碟:

<?php foreach($products as $product): ?>
    <?=htmlspecialchars($product['product_title']) ?>
    <?php foreach($products['images'] as $image): ?>
        <?=htmlspecialchars($image['image_name']) ?>
    <?php endforeach ?>
<?php endforeach ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM