Use “mysql_fetch_row” para recuperar resultados de banco de dados e inserir na matriz usando PHP e mysqli?

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

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 !!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top