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