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



我有两个彼此相关的表。第一个表是包括(product_id、product_title和product_price(的产品表,另一个表是包含(image_id、image_product_title(FK(和image_name(的图像表。因此,在这里,我试图获取所有带有图像的产品,这样它就会有一个产品,然后在该产品中有一个商品的多个图像,但我在以嵌套的方式调用两个不同的查询时遇到了问题。这是我的代码,所以你可以理解我试图做什么…

$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 ?>

最新更新