循环内的mysqli_fetch_assoc()仅从WHERE IN查询中获取第一行结果

时间:2019-03-22 15:37:39

标签: php mysql sql loops mysqli-fetch-array

我正在使用SELECT * FROM products WHERE id IN ('$arrayImplodedToStr') SQL查询来从数据库中同时获取多个值。该查询工作正常,因为当我回显$q时,我可以看到所有数组项在查询中都转换为ID号,并且它们很多。但是,当我进行查询并将其存储在数组中,然后在mysqli_fetch_assoc()循环内使用while来获取查询中的所有行时,我总是只得到第一项。而且不知道为什么吗?

代码:

session_start();
require_once('navigation.php');
require_once('database_connection.php');

if(empty($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}

array_push($_SESSION['cart'], $_GET['product_id']);
$arrayImplodedToStr = implode(',', $_SESSION['cart']);

$q = "SELECT * FROM products WHERE id IN ('$arrayImplodedToStr')";

$result = mysqli_query($dbc, $q);
mysqli_query($dbc, $q);
$allRows = [];

while($row = mysqli_fetch_assoc($result)) {
    $allRows[] = $row;
}

foreach ($allRows as $cartItems) {
    echo $cartItems['name'];
}

谢谢。

2 个答案:

答案 0 :(得分:2)

您不希望在数组字符串周围加上引号。这将使它全部成为一项,并且-如果是数字,则将其截断为找到的第一个。

如果保证各个项目都是数字,请删除引号。如果在那里可能有文本字符串,则需要用引号将字符串中的每个项目都用引号引起来,例如用'a', 'b', 'c'代替'a, b, c'

答案 1 :(得分:-2)

您可以使用

$ result = mysqli_fetch_all($ mysqli-> query($ query)