Используйте & # 8220; mysql_fetch_row & # 8221; извлечь результаты из базы данных и вставить в массив, используя PHP и MySQL?
Вопрос
Мне нужно извлечь данные из нескольких строк, а затем вставить результаты в перечислимый массив, чтобы я мог использовать " для " цикл, чтобы повторить это ...
У меня есть это (я уже подключился к базе данных):
$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
может выполнить эту работу, но я новичок в программировании, поэтому мне нужно очень подробное объяснение ..
Спасибо !!
Решение
Вы можете выполнить цикл с помощью метода 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"]);
}
РЕДАКТИРОВАТЬ: Альнитак ссылается на лучшее объяснение, чем я, в комментариях к этому ответ.
Это не совсем ответ на вопрос, но если вы хотите распечатать массив в виде списка через запятую, лучше использовать команда implode , чем цикл for:
//Replaces the for loop in the question
echo implode(', ', $genre);
... за исключением того, что после последнего элемента нет запятой.
Просто для завершения ответа @Mykroft, если вам действительно нужен перечислимый массив, просто используйте $ result-> gt; fetch_array (MYSQLI_NUM), хотя в большинстве случаев ассоциативный массив намного проще.