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