Использовать "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 ответа:
Можно выполнить цикл, используя метод
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);
...за исключением того, что после последнего элемента нет запятой.