fetch array in fetch array
hc
- php
hallo, der kompliziert-macher ist wieder da :P
diesmal hab ich folgendes problem:
$string= abfrage aus datenbank (mehrere datensätze betroffen)
$db->query($string);
while($array=$db->f_array()) {
ein paar hier unbedeutende kleinigkeiten...
dann kommt das hier
if($array[blubb]!=0) {
$string= abfrage aus anderen tabelle (genau ein datensatz betroffen; vergleichbar mit: $id vorhanden, titel dazu wird gesucht)
$db->query($string);
$result=$db->f_array();
...
dann gehts noch weiter...
die sache is jetzt die, dass anscheinend hier der array-inhalt von $array (der ersten fetch_array funktion), von der 2ten, $result (2te fetch_array funktion) scheinbar überlagert wird...
jedenfalls stoppen die inhalte, bzw. es werden keine inhalte mehr aus $array ausgelesen, nach dem ersten durchgang der schleife...
wie könnte ich das jetzt umgehen, oder die 2te sql-abfrage auslagern, so dass die erste nicht überschrieben wird (bzw. die erste sichern)?
mfg,
hc
Dein Objekt $db ist falsch programmiert. [1]
Wenn du was funktionierendes willst, kann ich dir PEAR::DB empfehlen.
[1] Wenn du wissen willst, was schief läuft, musst du uns dazu was verraten.
hi,
if($array[blubb]!=0) {
$string= abfrage aus anderen tabelle (genau ein datensatz betroffen; vergleichbar mit: $id vorhanden, titel dazu wird gesucht)
$db->query($string);
an dieser stelle überschreibst du dir höchstwahrscheinlich dein erstes abfrage-ergebnis - weil du hier wiederum $db dafür nutzt.
gruß,
wahsaga
Hello,
if($array[blubb]!=0) {
$string= abfrage aus anderen tabelle (genau ein datensatz betroffen; vergleichbar mit: $id vorhanden, titel dazu wird gesucht)
$db->query($string);an dieser stelle überschreibst du dir höchstwahrscheinlich dein erstes abfrage-ergebnis - weil du hier wiederum $db dafür nutzt.
Noch viel schlimmer. Er überschreibt nicht das Ergebnis, sondern die Handlevariable. Und damit ist das alte Handle weg. Er kann also den Speicherbereich, den die Abfrage belegt hat, nicht wieder freigeben. Lost Handles sind ein häufiges Problem dafür, dass Abfragen mittels PHP und MySQL (oder anderen DBMS) langsam werden. MySQL stellt standardmäßig nur 9 Handles zur Verfügung. Spätestens beim 10ten gibts die sinnige Fehlermeldung "10 ist not a valid result ressource".
Ich wollte immer schon mal raussuchen, wo man die Anzahl der Handles für Resultsets einstellen kann in MySQL und was vor allem passiert, wenn man mehrere größere Abfragen nicht wieder freigibt, also sehr viel Speicher verbraucht/benutzt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hallo,
Also auf gut Deutsch: Ich sollte free_result();'s einbauen?
Hmm, daran hab ich auch schon gedacht, aber war dann zu faul es zu verwirklichen *gg... ich versuchs mal, danke für eure Hilfe!
gez,
hc
Hello,
Also auf gut Deutsch: Ich sollte free_result();'s einbauen?
Ja.
Am Scriptende würden die automatisch wieder freigegeben werden.
Wenn Du aber im Script eine Schleife zur SQL-Abfrage oder gar Rekursion nutzt, dann musst Du schon selbst drauf achten.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom