Используйте & # 8220; mysql_fetch_row & # 8221; извлечь результаты из базы данных и вставить в массив, используя PHP и MySQL?

StackOverflow https://stackoverflow.com/questions/627036

Вопрос

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

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

$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), хотя в большинстве случаев ассоциативный массив намного проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top