Mailinglisten-Archive |
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