Используйте "mysql_fetch_row", чтобы получить результаты из базы данных и вставить в массив, используя PHP и mysqli? - PullRequest
5 голосов
/ 09 марта 2009

Мне нужно извлечь данные из нескольких строк, а затем вставить результаты в перечислимый массив, чтобы я мог использовать цикл 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 ]

2 голосов
/ 09 марта 2009

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

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

РЕДАКТИРОВАТЬ: Альнитак связано с лучшим объяснением, чем я в комментариях к этому ответу.

1 голос
/ 09 марта 2009

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

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

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

1 голос
/ 09 марта 2009

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

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

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

0 голосов
/ 09 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...