Rolf B: PHP PDO Problem

Beitrag lesen

Hallo Michael,

ist schon okay, dass Du hier fragst. Man sagt uns nach, gelegentlich schon 2-3 Worte PHP gesprochen zu haben.

Meine Hinweise:

Der monströse SELECT. Ich habe das editiert und HEREDOC Syntax draus gemacht. Deutlich lesbarer, gelle?

Wenn Code nicht tut, was man erwartet, muss man debuggen. Ich habe das Problem jetzt durch Anstarren gefunden (auch nicht im ersten Anlauf), aber wenn ich PHP schreibe, habe ich immer eine Log-Funktion, die Protokolleinträge in einem Array sammelt und am Seitenende raushaut. Wenn der Code produktiv läuft, mache ich aus der Log-Funktion einen Dummy, der nichts tut. Alternativ kannst Du Log-Infos auch mit error_log ins PHP Log schreiben, meine Erfahrung ist nur, dass das relativ langsam ist.

Damit kannst Du dann Variablenwerte protokollieren und schauen, ob die erwarteten Werte herauskommen. Wenn nicht, kannst Du die Problemstelle eingrenzen.

Was habe ich gefunden:

Du versuchst, eine kommaseparierte Liste zu erkennen und daraus mehrere LIKEs zu machen. Kann man machen, ist aber mühsam. Und vor allem geht das nicht, wenn Du SQL Parameter verwendest. Innerhalb eines Parameterwertes darf keine SQL Syntax vorkommen - na gut, darf schon, wird aber als zu suchender Wert und nicht als SQL interpretiert. Und weil die Fahrzeugnummern in deiner DB nicht das Wort LIKE enthalten, findest Du nichts.

Hinzu kommt die exnummern-tabelle, da heißt die Spalte nicht fahrzeugnummer sondern exnummer, deine LIKE-Verkettung sucht aber fahrzeugnummer. Das gibt einen SQL Fehler, er wird die Ausführung gar nicht erst versuchen.

Drittens hast Du hinter den Kommata in der Nummernliste Leerstellen. Die schmeißt Du beim Erzeugen der Like-Liste nicht weg, d.h. du würdest explizit nach diesem Space suchen. Was mutmaßlich schiefgeht. Aber wie gesagt: so weit kommst Du gar nicht.

Wenn die Fahrzeugnummernfragmente, die Du suchst, ausschließlich aus Ziffern und Leerstellen bestehen, kannst Du eventuell mit REGEXP arbeiten. Das hängt von deiner Datenbank ab. Welche hast Du? Und zwar ganz genau?

Andernfalls musst Du den FROM-Teil des SQL von Hand zusammenklöppeln. Geht, ist aber etwas umständlich. Darüber reden wir dann, wenn's nötig ist. Und wenn's nicht nötig ist, reden wir über REGEXP.

Das wichtigste ist: Das Ergebnis von $statement->execute() muss überprüft werden. IMMER IMMER IMMER. Ist es FALSE, ging in der Query etwas schief und du hast kein valides Ergebnis. In $statement->errorInfo() findest Du den Grund, warum es schiefging (das ist ein Array mit mehreren Einträgen, entweder haust Du die mit var_dump() zum Browser raus oder loggst sie sorgfältig. Ignorieren geht hingegen gar nicht).

Rolf

--
sumpsi - posui - obstruxi