Use “mysql_fetch_row” para recuperar resultados de banco de dados e inserir na matriz usando PHP e mysqli?
Pergunta
Eu preciso recuperar dados de várias linhas e, em seguida, inserir os resultados em uma matriz enumerada tão então eu posso usar um loop "for" a eco-lo ...
Eu tenho isso (eu já conectado ao banco de dados):
$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();
}
Aqui eu recebo o primeiro resultado (linha) em uma variável. Mas eu preciso inseri-lo em uma matriz numérica de modo a que eu possa ecoar cada resultado usando este:
if (!empty($genre)) {
for ($i = 0; $i + 1 < count($genre); $i++)
{
echo $genre[$i].', ';
}
echo $genre[$i];
}
Esta ecoará:. $genre[0], $genre[1], $genre[2],
e assim por diante até o último
Eu sei que mysql_fetch_row
pode fazer o trabalho, mas eu sou novo em programação, então eu preciso de uma explicação muito detalhada ..
Obrigado !!
Solução
Você pode fazer um loop usando o método MySQLi_Statement::fetch
:
$stmt->bind_result($genre);
$stmt->execute();
$genres = array();
while ($stmt->fetch()) {
$genres[] = $genre;
}
Basicamente fetch
fornece um iterador que o while
pode usar para percorrer cada resultado. As variáveis ??em bind_result
(neste caso $genre
) são redesignados a cada iteração.
Outras dicas
Eu não estou 100% familiarizado com mysqli mas eu joguei com um monte de comandos pgsql fazendo esse tipo de coisa e eu acho que o que procura é mysqli-result-> fetch_assoc . Isto irá produzir uma matriz associativa que você pode fazer um loop sobre muito facilmente assim:
while ($row = $result->fetch_assoc()) {
printf ($row["genre"]);
}
EDIT: Alnitak tem um link para explicação melhor do que eu tenho nos comentários para esta resposta.
Isto não é realmente uma resposta para a pergunta, mas se você quiser imprimir uma matriz como uma lista separada por vírgulas, é melhor usar o comando implode do que um loop:
//Replaces the for loop in the question
echo implode(', ', $genre);
... exceto que não há nenhuma vírgula após o último elemento.
Apenas a resposta @Mykroft completa, se você realmente quer apenas uma matriz numérica basta usar $ result-> fetch_array (MYSQLI_NUM), embora e matriz associativa é muito simples de usar na maioria das situações.