Mailinglisten-Archive |
Hallo Lutz & Sebastian, Das Problem scheint gelöst... nunja, mit abweichenden Schreibweisen wage ich auszuschließen (sonst käme ja ein PHP-Error...). Zudem viel auf dass der Fehler (wenn überhaupt) nur auftrat, nachdem bereits ein SELECT-Query (dieser oder ein anderer) aufgerufen wurde. Ein Freund (Yannik) wies mich auf einen "Bug" hin, der entsteht, wenn man die Results eines Prepared SELECT-Statements nicht komplett abholt... Ich habe nun hinter jedem aufruf zusätzlich $stmt->closeCursor() aufgerufen, und nun funktioniert es. Allerdings ist es mir immer noch ein Rätsel, da der andere Query im betreffenden Script ein LIMIT 1 enthält, und fetch aufgerufen wird... Also eigentlich müsste alles abgerufen sein. Naja, jedenfals geht es jetzt^^ mfg Gereon Lutz Zetzsche schrieb: > Hallo Gereon, > > Am Donnerstag, 16. November 2006 20:50 schrieb Gereon Kremer: >> Ich habe ein kleines Blackout in sachen PDO... >> >> Ich habe ein funktionierende DB-Verbindung (andere Querys und >> Prepared Statements funktionieren ja...) und folgendes Statement: >> >> $this->stmt_getcnt = $this->db->prepare('SELECT Count(*) FROM >> fragen'); >> >> Führe ich den Query in PhpMyAdmin aus, funktioniert alles... >> Auch alle anderen Querys auf die fragen-Tabelle funktionieren. >> >> nun möchte ich das ganze ausführen: >> >> if ($this->stmt_getcnt->execute(Array())) { >> $res = $this->stmt_getcnt->fetch(); >> } else exit(var_dump($this->db->errorInfo(),true)); >> >> Das Script bricht aber immer beim Exit ab und gibt diese ErrorInfo >> aus: >> >> array(1) { [0]=> string(5) "00000" } bool(true) >> >> was natürlich sehr vielsagend ist, und sonst nichts. > > kommt darauf an... errorInfo() liefert laut Handbuch folgendes zurück: > > 0 SQLSTATE error code > (a five-character alphanumeric identifier defined in the ANSI SQL > standard). > 1 Driver-specific error code. > 2 Driver-specific error message. > > Wenn Du obiges Ergebnis zurückerhältst, bedeutet das theoretisch, daß > kein SQL-Fehler aufgetreten ist. Die Frage ist also, wie konnte > execute() trotzdem FALSE zurückliefern... > > >> ich habe auch schon geprüft ob das Statement irgendwann mal null >> wird, wird es aber nicht. >> Es käme ja auch ein Fehler... > > ich habe Deine Code folgendermaßen bei mir nachgestellt: > > > $dbh = new PDO('mysql:host=localhost;dbname=...', '...', '...'); > > $stmt_getcnt = $dbh->prepare('SELECT Count(*) FROM Keyword'); > > if ($stmt_getcnt->execute(Array())) { > $res = $stmt_getcnt->fetch(); > } else exit(var_dump($stmt_getcnt->errorInfo(),true)); > > print_r($res); > > > Dabei wurde $res am Ende korrekt ausgegeben: > Array ( [Count(*)] => 16032 [0] => 16032 ) > > > Jetzt ist es natürlich schwierig, aus der Ferne Dein Problem zu lösen... > Also schreibe ich einfach mal ein paar Dinge, die ich an Deiner Stelle > prüfen würde: > > 1. Welche PHP- und PDO-Version setzt Du ein? Gibt einen bekannten Bug, > der Deinen Fehler verursacht haben könnte? > > 2. Oder liegt es vielleicht an Deinem Code? Passiert noch irgendetwas > zwischen prepare() und execute(), was den Fehler verursachen könnte? > > 3. Aufgrund fehlender SQL-Fehlermeldung unwahrscheinlich, aber: Liegt > eventuell ein Rechteproblem vor? Fehlende Zugriffsrechte bei der > aktuellen Verbindung auf die Tabelle? Oder auf einem Linuxsystem: Der > Tabellenname im SQL-Befehl weicht in der Schreibweise (groß/klein) von > dem Tabellennamen im Dateisystem ab? > > 4. Ansonsten fallen mir auf die Schnelle nur Kleinigkeiten ein, die Du > mal probieren könntest, z.B.: a) Array() in execute() gehört eigentlich > klein geschrieben (array()), b) würde ich array() in execute mal > weglassen, c) mal Count() im SQL-Befehl entweder COUNT() oder count() > schreiben... > > > Also im Prinzip sehe ich drei grundsätzliche Ansatzpunkte: ein Bug, ein > Fehler in Deinem Code oder eine gewisse Intoleranz gegenüber > abweichenden Schreibweisen. > > Vielleicht kommst Du damit ja weiter, wenn Du Dein Problem nicht > mittlerweile selbst gelöst hast. Wenn Du schon eine Lösung hast, wäre > es nett, wenn Du sie uns mitteilen könntest. So kann jeder davon > lernen. :-) > > > Viele Grüße > Lutz
php::bar PHP Wiki - Listenarchive