我正在尝试使用 php 制作购物车,如果用户单击“添加”,则会将产品 ID 添加到 session 数组中。有时数组有 2 次或 3 次相同的 ID。 我的问题是为什么当我运行查询时它只显示信息 1 次而不是 2 次。
例如:
Array = $_SESSION['productsArray']
包含(34, 43, 34)
每个数字都是一个产品 ID,我的查询仅显示“34”1 次而不是 2
$ids = $_SESSION['productsArray'];
$ids = join("','", $ids);
$query = "SELECT * FROM products WHERE pID IN ('$ids') ORDER BY pID";
$query_params = array(":ids" => $ids);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
$count = $stmt->rowCount();
} catch (PDOException $ex) {
die ('Failed to run query: ' . $ex->getMessage());
}
$rows = $stmt->fetchAll();
foreach ($rows as $row):
echo htmlentities($row['pName'], ENT_QUOTES, 'utf-8');
endforeach;
最佳答案
因为数据库中只有一条记录。
尝试使用关联数组,以 id 作为键,以数量作为值,如下所示,而无需修改 session 中的数组:
$ids = array_count_values($_SESSION['products_array']); // now $ids = array("34"=>"2", "43"=>"1")
$query_params = array(":ids" => array_keys($ids));
然后输出结果,如下所示:
foreach ($rows as $row):
for ($i = 1; $i <= $ids[$row['pID']]; $i++) {
echo htmlentities($row['pName'], ENT_QUOTES, 'utf-8');
}
endforeach;
我们使用 array_keys 函数获取 ids 仅用于检索数据,并从 session 关联数组中获取数量,并使用每行的 pID 来获取数量并根据它进行循环。
关于php - 如何从数据库中显示两次行信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469515/