2009-03-09 17 views
5

Ho bisogno di recuperare i dati da più righe e quindi inserire i risultati in una matrice enumerata, quindi posso usare un ciclo "for" per echo ...Utilizzare "mysql_fetch_row" per recuperare i risultati dal database e inserirli nell'array usando PHP e mysqli?

Ho questo (sono già connesso 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 inserirla in un array enumerato così la posso eco ogni risultato che utilizza questo:

if (!empty($genre)) { 
for ($i = 0; $i + 1 < count($genre); $i++) 
{ 
    echo $genre[$i].', '; 
} 
echo $genre[$i]; 
} 

Questo sarà eco: $genre[0], $genre[1], $genre[2], e così via fino all'ultimo.

So che il mysql_fetch_row può fare il lavoro, ma sono nuovo alla programmazione quindi ho bisogno di una spiegazione molto dettagliata .. Grazie !!

risposta

1

È possibile ciclo usando il metodo MySQLi_Statement::fetch:

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

Fondamentalmente fetch fornisce un iteratore che il while può usare per scorrere ogni risultato. Le variabili in $genre (in questo caso $genre) vengono riassegnate a ogni iterazione.

+0

Grazie semplice e mi ha aiutato! – Jonathan

2

Non ho familiarità al 100% con mysqli ma ho giocato con molti comandi pgsql che fanno questo genere di cose e penso che quello che stai cercando sia mysqli-result->fetch_assoc. Questo produrrà un array associativo che è possibile ciclare su abbastanza facilmente in questo modo:

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

EDIT:Alnitak è legata a una migliore spiegazione che ho nei commenti per questa risposta.

+0

AFAIK, non è possibile mescolare "fetch_assoc" con "execute". Il primo ha bisogno di un oggetto "set di risultati", come restituito da "query", mentre quest'ultimo funziona con un oggetto "statement". – Alnitak

+0

vedere http://stackoverflow.com/questions/627197/mixing-phps-mysqli-data-access-functions, dove ho cercato di esplorare questa differenza in modo più completo – Alnitak

0

Solo per completare la risposta di @Mykroft, se si desidera solo un array enumerato utilizzare solo $ result-> fetch_array (MYSQLI_NUM), anche se l'array associativo è molto semplice da utilizzare nella maggior parte delle situazioni.

1

Questo non è davvero una risposta alla domanda, ma se si vuole stampare una matrice come un elenco separato da virgole, è meglio utilizzare il comando implode di un ciclo for:

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

... eccetto che non c'è una virgola dopo l'ultimo elemento.

+0

Great, Thanks ... – Jonathan