如何从数据库中显示2次行信息

时间:2018-01-26 21:05:40

标签: php mysql sql arrays pdo

我试图用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;

2 个答案:

答案 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