phpbar.de logo

Mailinglisten-Archive

[php] PDO-Blackout

[php] PDO-Blackout

Gereon Kremer gereon.kremer at gmail.com
Fre Nov 17 15:14:53 CET 2006


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