我试图用php做购物车,如果用户点击"添加"它将产品ID添加到会话数组中。有时,阵列具有相同的ID 2次或3次。 我的问题是为什么当我运行查询时它只显示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;
答案 0 :(得分:1)
因为数据库中只有一条记录。
尝试使用关联数组,其中id为关键,数量为此值,而不会在会话中修改数组:
$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函数来获取id只能检索你的数据并从会话关联数组中获取数量,并使用每行中的pID来获取数量并根据它进行循环。
答案 1 :(得分:1)
使用时
WHERE pID in (34, 43, 34)
它只是测试每一行以查看它是否满足该条件。即使条件有34
两次,表中只有一行与它匹配,因此查询只返回那一行。
如果要在结果中获取两次行,则需要对每个ID执行单独的查询。您可以将它们与UNION ALL
结合使用。
SELECT * FROM products WHERE pID = 34
UNION ALL
SELECT * FROM products WHERE pID = 43
UNION ALL
SELECT * FROM products WHERE pID = 34