Использовать "mysql fetch row" для извлечения результатов из базы данных и вставки в массив с помощью PHP и mysqli?


Мне нужно извлечь данные из нескольких строк, а затем вставить результаты в перечисляемый массив, чтобы затем я мог использовать цикл "for" для Эхо-обработки...

У меня есть это (я уже подключился к базе данных):

$genres_sql = 'SELECT genreID FROM genres WHERE imdbID = ?';
if ($stmt->prepare($genres_sql)) {
    // bind the query parameters
    $stmt->bind_param('i', $movieid);
    // bind the results to variables
    $stmt->bind_result($genre);
    // execute the query
    $stmt->execute();
    $stmt->fetch();
}

Здесь я получаю первый результат (строку)в переменную. Но мне нужно вставить его в перечисляемый массив, чтобы я мог повторить каждый результат, используя это:

if (!empty($genre)) {
for ($i = 0; $i + 1 < count($genre); $i++)
{
    echo $genre[$i].', '; 
}
echo $genre[$i];
}

Это будет эхом: $genre[0], $genre[1], $genre[2], и так далее до последнего.

Я знаю, что mysql_fetch_row может сделать эту работу, но я новичок для программирования мне нужно очень подробное объяснение.. Спасибо!!

4 5

4 ответа:

Можно выполнить цикл, используя метод MySQLi_Statement::fetch:

$stmt->bind_result($genre);
$stmt->execute();
$genres = array();
while ($stmt->fetch()) {
    $genres[] = $genre;
}

В основном fetch предоставляет итератор, который while может использовать для итерации каждого результата. Переменные в bind_result (в данном случае $genre) переназначаются с каждой итерацией.

Я не на 100% знаком с mysqli, но я играл со многими командами pgsql, делающими такие вещи, и я думаю, что вы ищете mysqli-result->fetch_assoc. Это создаст ассоциативный массив, который вы можете довольно легко перебирать, например:

while ($row = $result->fetch_assoc()) {
    printf ($row["genre"]);
}

Править: Alnitak связался с лучшим объяснением, чем я в комментариях к этому ответу.

На самом деле это не ответ на вопрос, но если вы хотите распечатать массив в виде списка, разделенного запятыми, лучше использовать команду implode, чем цикл for:

//Replaces the for loop in the question
echo implode(', ', $genre);

...за исключением того, что после последнего элемента нет запятой.

Просто для завершения ответа @Mykroft, если вам действительно нужен перечисляемый массив, просто используйте $result - >fetch_array (MYSQLI_NUM), хотя и ассоциативный массив очень прост в использовании в большинстве ситуаций.