php - 如何从数据库中显示两次行信息

标签 php mysql sql arrays pdo

我正在尝试使用 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/

相关文章:

PHP MySQL 和 ajax 实践项目

php - 检查前一个 MySQL 查询的状态并执行下一个查询

php 表单使用 POST 在输入值字段中发送数组

PHP/MySQL : Import data and store in hierarchical nested set for use with jsTree

mysql - 带有嵌套选择的sql插入语句

while 循环内的 PHP 单个查询未在 MySQL 上运行

java - 处理海量数据表时应该如何使用Hibernate Mapping

php - SELECT - 拆分字段内容

php - Laravel 未连接 mysql 数据库

php - 如何从pdf文件中获取文本并将其保存到数据库中