Utilizzare "mysql_fetch_row" per recuperare i risultati dal database e inserirli nell'array utilizzando PHP e mysqli?

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

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top