mysqli_fetch_assoc () внутри цикла получает только первый результат строки из запроса WHERE IN - PullRequest
0 голосов
/ 22 марта 2019

Я использую SELECT * FROM products WHERE id IN ('$arrayImplodedToStr') SQL-запрос для получения нескольких значений из базы данных одновременно.Запрос работает нормально, потому что когда я повторяю $q, я вижу все элементы массива, преобразованные в идентификаторы в запросе, и их много.Но когда я делаю запрос и сохраняю его внутри массива, а затем использую 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 ]

2 голосов
/ 22 марта 2019

Вам не нужны кавычки вокруг строки массива.Это сделает все это одним элементом, и - в случае чисел - обрежьте его до первого найденного.

Если отдельные элементы гарантированно будут числами, удалите кавычки.Если у вас там могут быть текстовые строки, вам нужно заключить в кавычки каждый отдельный элемент в строке, например 'a', 'b', 'c' вместо 'a, b, c'

0 голосов
/ 22 марта 2019

Вы можете использовать

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

...