Utilizzare "mysql_fetch_row" per recuperare i risultati dal database e inserirli nell'array utilizzando PHP e mysqli?
Domanda
Devo recuperare i dati da più righe e quindi inserire i risultati in un array elencato in modo da poter usare un "per" loop per eco ...
Ho questo (mi sono già collegato al database):
$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();
}
Qui ottengo il primo risultato (riga) in una variabile. Ma devo inserirlo in un array enumerato in modo da poter fare eco a ogni risultato usando questo:
if (!empty($genre)) {
for ($i = 0; $i + 1 < count($genre); $i++)
{
echo $genre[$i].', ';
}
echo $genre[$i];
}
Questo farà eco: $ genere [0], $ genere [1], $ genere [2],
e così via fino all'ultimo.
So che mysql_fetch_row
può fare il lavoro, ma sono nuovo nella programmazione, quindi ho bisogno di una spiegazione molto dettagliata.
Grazie !!
Soluzione
Puoi eseguire il loop utilizzando il metodo MySQLi_Statement :: fetch
:
$stmt->bind_result($genre);
$stmt->execute();
$genres = array();
while ($stmt->fetch()) {
$genres[] = $genre;
}
Fondamentalmente fetch
fornisce un iteratore che mentre
può usare per iterare attraverso ogni risultato. Le variabili in bind_result
(in questo caso $ genre
) sono riassegnate ad ogni iterazione.
Altri suggerimenti
Non ho familiarità al 100% con mysqli ma ho giocato con molti comandi pgsql facendo questo genere di cose e penso che ciò che stai cercando sia mysqli-result- > fetch_assoc . Questo produrrà un array associativo su cui puoi eseguire il loop abbastanza facilmente in questo modo:
while ($row = $result->fetch_assoc()) {
printf ($row["genre"]);
}
EDIT: Alnitak ha collegato una spiegazione migliore di quella che ho nei commenti per questo risposta.
Questa non è davvero una risposta alla domanda, ma se vuoi stampare un array come un elenco separato da virgole, è meglio usare implode comando di un ciclo for:
//Replaces the for loop in the question
echo implode(', ', $genre);
... tranne che non c'è una virgola dopo l'ultimo elemento.
Solo per completare la risposta di @Mykroft, se vuoi davvero un array elencato usa solo $ result- > fetch_array (MYSQLI_NUM), sebbene l'array associativo sia molto semplice da usare nella maggior parte delle situazioni.