2009-03-09 4 views
5

Ich muss Daten aus mehreren Zeilen abrufen und dann die Ergebnisse in ein enumeriertes Array einfügen, dann kann ich eine "for" -Schleife verwenden, um es zu echo ...Verwenden Sie "mysql_fetch_row", um Ergebnisse aus der Datenbank abzurufen und mithilfe von PHP und mysqli in ein Array einzufügen?

Ich habe dies (ich bereits mit der Datenbank verbunden) :

$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(); 
} 

Hier bekomme ich das erste Ergebnis (Zeile) in eine Variable. Aber ich brauche es in ein numerisches Array einzufügen, so dass die ich jedes Ergebnis dieser mit echo kann:

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

Dies wird echo: $genre[0], $genre[1], $genre[2], und so weiter bis zum letzten.

Ich weiß, dass mysql_fetch_row kann die Arbeit tun, aber ich bin neu in der Programmierung, also brauche ich eine sehr detaillierte Erklärung .. Vielen Dank !!

Antwort

1

können Sie mit der Schleife MySQLi_Statement::fetch Methode:

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

fetch Grundsätzlich stellt einen Iterator, dass die while können durch jedes Ergebnis iterieren. Die Variablen in bind_result (in diesem Fall $genre) werden bei jeder Iteration neu zugewiesen.

+0

Danke einfach und es hat mir geholfen! – Jonathan

2

Ich bin nicht 100% vertraut mit mysqli, aber ich habe mit vielen pgsql-Befehle, die diese Art von Sache zu tun, und ich denke, was Sie suchen, ist mysqli-result->fetch_assoc. Dies wird ein assoziatives Array erzeugen, die Sie können über die Schleife ziemlich leicht wie so:

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

EDIT:Alnitak hat zu einem besseren Erklärung verknüpft, als ich in den Kommentaren zu dieser Antwort.

+0

AFAIK, es ist nicht möglich, "fetch_assoc" mit "execute" zu mischen. Ersteres benötigt ein "result set" -Objekt, wie es von "query" zurückgegeben wird, während letzteres mit einem "statement" -Objekt arbeitet. – Alnitak

+0

siehe http://stackoverflow.com/questions/627197/mixing-phps-mysqli-data-access-functions, wo ich versucht habe, diesen Unterschied vollständiger zu erkunden – Alnitak

0

Nur um @MyKroft Antwort zu vervollständigen, wenn Sie wirklich wollen nur ein Enumerations-Array verwenden Sie einfach $ result-> fetch_array (MYSQLI_NUM), obwohl und assoziative Array ist sehr einfach in den meisten Situationen zu verwenden. Diese

1

ist nicht wirklich eine Antwort auf die Frage, aber wenn Sie ein Array als durch Kommata getrennte Liste ausdrucken wollen, dann ist es besser, den implode Befehl als ein for-Schleife zu verwenden:

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

... außer dass nach dem letzten Element kein Komma steht.

+0

Großartig, Danke ... – Jonathan