SQL - Resultate mehrmals durchlaufen ?
Worrel
- php
0 Thomas Schmieder
Hallo,
Ich möchte das Ergabnis einer SQL-Abfrage mehrmals durchlaufen und habe dazu folgendes Konstrukt in PHP erdacht (welch Wortwahl!) :
$sql = "select * from liste where artnr = $artnr";
$result = odbc_exec($conn, $sql);
odbc_fetch_row($result);
while (odbc_fetch_row($result)) {
... ;
}
odbc_fetch_row($result, 0);
do {
... ;
}
while (odbc_fetch_row($result));
Jedoch durchläuft der Rechner nur die erste Zeile der zweiten Schleife.
Wie kann ich es erreichen, daß er die zweite Schleife durchläuft ?
Thx for help,
Worrel
Hallo,
Ich möchte das Ergabnis einer SQL-Abfrage mehrmals durchlaufen und habe dazu folgendes Konstrukt in PHP erdacht (welch Wortwahl!) :
$sql = "select * from liste where artnr = $artnr";
$result = odbc_exec($conn, $sql);
odbc_fetch_row($result);
// --------------------------------------------------------
// warum willst Du denn die Ergebnisse wegschmeißen?
while ($Satz = odbc_fetch_row($result))
{
Satzauswerten($satz, 1);
}
reset($result);
//und dann das ganze nochmal
while ($Satz = odbc_fetch_row($result))
{
Satzauswerten($satz, 2);
}
reset($result);
// das kannst Du so oft wiederholen, bis der Strom ausfällt
// -------------------------------------------
while (odbc_fetch_row($result)) {
... ;
}
das hier unten muss ne Fehlermeldung geben!
odbc_fetch_row($result, 0);
do {
... ;
}
while (odbc_fetch_row($result));
Jedoch durchläuft der Rechner nur die erste Zeile der zweiten Schleife.
Wie kann ich es erreichen, daß er die zweite Schleife durchläuft ?
Du musst den Array-Datensatzzeiger auf den Anfang zurücksetzen.
Gruß
Tom
Hi,
danke für die Antwort.
Diese Zeile:
odbc_fetch_row($result);
gehört da nicht hin, die hab ich aus Versehen mitkopiert (Schande über mein Haupt ...)
reset($result);
Das hab ich gesucht. Danke !
// das kannst Du so oft wiederholen, bis der Strom ausfällt
Das wird aber auf die Dauer auch langweilig ... ;-)
das hier unten muss ne Fehlermeldung geben!
odbc_fetch_row($result, 0);
do {
... ;
}
while (odbc_fetch_row($result));
Äh, nö. Es passiert nach dem 'odbc_fetch_row($result, 0);' halt nichts mehr ...
Welche Fehlermeldung sollte denn kommen ?
rya,
Worrel
Hi,
jetzt hab ich eine Fehlermeldung
Variable passed to reset() is not an array or object
bei der Zeile
reset($result);
da $result das Ergebnis einer SQL-Abfrage ist. Gibt es dafür auch eine Möglichkeit, den Zeiger zurückzusetzen ?
rya,
Worrel
Hi,
jetzt hab ich eine Fehlermeldung
Variable passed to reset() is not an array or object
bei der Zeile
reset($result);
da $result das Ergebnis einer SQL-Abfrage ist. Gibt es dafür auch eine Möglichkeit, den Zeiger zurückzusetzen ?
rya,
Worrel
anstatt row versuch mal einen array
also
odbc_fetch_array
dann hast du deinen array.
Moin!
jetzt hab ich eine Fehlermeldung
Variable passed to reset() is not an array or object
bei der Zeile
reset($result);
da $result das Ergebnis einer SQL-Abfrage ist. Gibt es dafür auch eine Möglichkeit, den Zeiger zurückzusetzen ?
anstatt row versuch mal einen array
also
odbc_fetch_array
dann hast du deinen array.
Das Problem liegt tiefer: reset() setzt den PHP-internen Zeiger eines Arrays zurück auf den Anfang, aber nicht den Datenquellenzeiger einer Datenbankabfrage - deshalb klappt reset() hier nicht.
Besser wäre doch, eine Datenbankfunktion zu nehmen:
mysql_field_seek()
msql_field_seek()
mssql_field_seek()
sybase_field_seek()
Das einzige, was fehlt, ist odbc_field_seek - vermutlich, weil man diese Funktion mit ODBC nicht benutzen kann, weil es keine allgemeine Datenbankfunktion ist. Und so bleiben nur zwei Möglichkeiten: Entweder die Ergebnisse der Datenbankabfrage beim ersten Mal gleich in ein Array einlesen und beim zweiten Mal darauf zugreifen, oder zweimal die Datenbank abfragen.
- Sven Rautenberg
Hi,
danke für die Antworten.
@Norx:
Ich wollte eigentlich gar kein Array verwenden, ich wollte nur eine SQL-Abfrage zweimal verwenden.
Ich werde erstmal folgendes verwenden :
$sql = "select * from liste where artnr = $artnr";
$result = odbc_exec($conn, $sql);
while (odbc_fetch_row($result)) {
... ;
}
$result = odbc_exec($conn, $sql);
while (odbc_fetch_row($result)) {
... ;
}
rya,
Worrel