2014-10-31 2 views
5

Mit dem alten mysql_ Syntax ich in der Lage war, so etwas zu tun:Extrahieren von n-te Element eines Mysqli Abfrageergebnis

$query=mysql_query('select id from rank'); 
for ($i=0; $i<$max; $i++) { 
$id0[$i] = mysql_result($query, $i, "id"); 
$id1[$i] = mysql_result($query, $i+1, "id"); 
$id2[$i] = mysql_result($query, $i+2, "id"); } 

Ich bin bei der Erreichung das gleiche Ergebnis mit mysqli eine Menge Schwierigkeiten zu finden; Normalerweise hole ich die Daten einer mysqli-Abfrage mit der Funktion mysqli_fetch_assoc($query), um alle Datensätze im Abfrageergebnis Zeile für Zeile rekursiv zu extrahieren.

Wie kann ich das Ergebnis erhalten, das ich benötige, d. H. Bei jedem Zyklus der rekursiven Funktion das n-te, n-te + 1, n-te + 2-Element des Abfrageergebnisses extrahieren? Und wie kann ich auf das n-te Element des id Feldes verweisen? Es scheint unmöglich für mich, mit einer Zeile des Abfrageergebnisses zu einer Zeit zu arbeiten ...

Entschuldigung, wenn diese Frage scheint albern zu sein, aber ich bin gerade dabei, eine alte Seite mit der mysql_ Syntax zu konvertieren in mysqli_ und mir viele Schwierigkeiten, selbst wenn ich zu PHP.net Dokumentation zu beziehen versuchen würde zu begegnen (und natürlich auch Wissen Stack-Überlaufes ...) ...

EDIT (Problem gelöst): I‘ Ich habe mein Problem nach den Vorschlägen von Jeroen gelöst: Da die Funktion fetch_all nicht verfügbar ist, habe ich ein Array erstellt, das jede Zeile des msqli-Abfrageergebnisses über eine Schleife speichert:

while ($row=mysqli_fetch_assoc($query)) 
    $table[]=$row; 

Betrieb auf diese Weise es zu jedem Datensatz der Tabelle zeigt viel einfacher ist, mit dem üblichen Indizes:

for ($i=0; $i<$max; $i++) { 
    $id0[$i]=$table[$i]["id"]; 
    $id1[$i]=$table[$i+1]["id"]; 
    $id2[$i]=$table[$i+2]["id"]; } 
+0

Wenn Sie die Website sowieso konvertieren, würde ich vorschlagen, die PDO-Klasse. http://us3.php.net/manual/en/class.pdo.php – JakeParis

+4

@JakeParis: Nur fyi er sucht nach einer mysqli_ Lösung. Er hat nur gesagt, dass er vorher mysql_ benutzt, aber er möchte dasselbe in mysqli erreichen. –

+0

@TiborB., Siehe http://us3.php.net/manual/en/function.mysqli-fetch.php – JakeParis

Antwort

3

Sie mysqli_data_seek() verwenden können, um das Ergebnis Zeiger auf eine beliebige Zeile in der Ergebnismenge einzustellen.

So würde der Code in etwa so aussehen:

for ($i=0; $i<$max; $i++) { 
    mysqli_data_seek($result, $i); 
    // depending on your php version you might need a temporary variable to 
    // get the ID 
    $id0[$i] = mysqli_fetch_assoc($result)['id']; 
    ... 
} 
+1

Ich versuche diese Art von Ansatz, ich denke, das ist der richtige Weg (oder zumindest derjenige, der mein Problem lösen kann) – Hunter

+0

@Hunter Es tut, was Ihre alte Lösung tut. Wenn Sie dies jedoch sehr oft tun - "$ max" ist groß - ist es möglicherweise effizienter, alle Zeilen der Abfrage in einem Array auf einmal zu erhalten und die Ergebnisse in Ihrer Schleife von diesem Array abzurufen. – jeroen

+0

was meinst du mit "auf einmal"? Verwenden einer Schleife und Speichern jeder Zeile abgerufen 'mysqli_fetch_assoc' in einem Array ... oder mit einer geeigneten Funktion, um alle Daten (wirklich) auf einmal zu bekommen? Ist die 'fetch_all()' Funktion gemeint? Ah, es scheint, dass meine PHP-Version 5.3.1 ist (weiß nicht, was sie mit diesem "Extra" meinen ;-)), also frage ich mich, warum ich diesen Fehler mit 'fetch_all' bekomme. – Hunter