Seite 1 von 1

SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler

Verfasst: 19.10.2009 20:19
von Reisemobilist
Hallo liebe SQL- und PHP-Guru's!

"Isch hätt da mal gerne ein kleines Problem."

btw. Ich habe mir schon wunde Finger gesucht und hab so viel Halbwissen gesammelt, dass ich jetzt Unterstützung benötige.

Bevor ich weiter auf den Fehler eingehe: Grundsätzlich funktioniert das Konstrukt - die Definition der Variable "$abfrage" und die Umsetzung in die "$sql" ist erst einmal nicht das Problem, wenn ich eine Tabelle "BB3_PROFILE_FIELDS_DATA" in meiner Datenbank habe. Dann bekomme ich beim Aufruf meiner .php-Datei den gewünschten Output.

Original heißt die Tabelle aber "bb3_profile_fields_data" - ein kleiner und doch großer Unterschied. Zum Code:

Code: Alles auswählen

$abfrage = 'SELECT DISTINCT user_id FROM bb3_profile_fields_data INNER JOIN bb3_profile_fields_lang ON bb3_profile_fields_data.pf_kfz_stat = bb3_profile_fields_lang.option_id + 1 WHERE bb3_profile_fields_lang.lang_value LIKE';

$sql = "$abfrage '462 auf MB, Modelljahr 1973 bis 1975'";
Lasse ich diesen Code in meiner PHP-Datei durchlaufen und habe keine Tabelle "BB3_PROFILE_FIELDS_DATA" (also alles GROSS geschrieben) bekomem ich den folgenden Hinweis:

Code: Alles auswählen

Allgemeiner Fehler
SQL ERROR [ mysqli ]

Table 'sqldb1.BB3_PROFILE_FIELDS_DATA' doesn't exist [1146]
Ich weiß: Fehler 1146 zeigt mir, dass die Tabelle fehlt... in diesem Fall fehlt die Tabelle "BB3_PROFILE_FIELDS_DATA" tatsächlich. Vorhanden ist aber die Tabelle "bb3_profile_fields_data". (Ihr braucht nicht zu vergleichen: es sind die gleichen Buchstaben - nur einmal klein und einmal GROSS).

Gehe ich jetzt über phpmyadmin und kopiere die Tabelle "bb3_profile_fields_data" mitsamt Inhalt in eine neue Tabelle "BB3_PROFILE_FIELDS_DATA" funktioniert meine .php-Datei (ist ja logisch, weil die in der Fehlermeldung als fehlend angeprangerte Tabelle nun vorhanden ist).

Bitte keine Verweise auf "wie maskiere ich richtig" - ich habe sämtliche Kombinationen von " und ' und ` ausprobiert, nachdem ich hunderte von Anleitungen dazu gelesen habe. Ich habe bei meiner Recherche gefunden, dass irgendwas meine Tabellendefinition (in diesem Teil, fett rausgehoben: SELECT DISTINCT user_id FROM bb3_profile_fields_data INNER JOIN) in UPPER_CASE verwandelt. Ich könne dies unterbinden, wenn ich die Tabellendefinition mit Hochkommata maskiere.
Das hier

Code: Alles auswählen

$abfrage = 'SELECT DISTINCT user_id FROM "bb3_profile_fields_data" INNER JOIN bb3_profile_fields_lang ON bb3_profile_fields_data.pf_kfz_stat = bb3_profile_fields_lang.option_id + 1 WHERE bb3_profile_fields_lang.lang_value LIKE';
(egal mit welchen Hochkommata) klappt aber nicht. Ich bekomme dann irgendwie andere Hinweise auf Fehler in meiner SQL-Abfrage.

Welcher Profi und liebe Mensch hilft mir auf die Sprünge und schreibt mir diese eine Zeile Code richtig? Oder auch zwei Zeilen, wenn ich die "$sql = ..." mit einbeziehe.

Zwei Sachen noch:
1. Kopiere ich die folgende Anweisung in phpmyadmin in ein SQL-Fenster, bekomme ich das erwartete (richtige) Ergebnis

Code: Alles auswählen

SELECT DISTINCT user_id FROM bb3_profile_fields_data INNER JOIN bb3_profile_fields_lang ON bb3_profile_fields_data.pf_kfz_stat = bb3_profile_fields_lang.option_id + 1 WHERE bb3_profile_fields_lang.lang_value LIKE '462 auf MB, Modelljahr 1973 bis 1975';
2. Es macht keine Unterschied, ob ich in meiner .php-Datei mein obiges Konstrukt mit der Definition einer Variablen einsetze oder direkt diese Zeile schreibe:

Code: Alles auswählen

$sql = "SELECT DISTINCT user_id FROM bb3_profile_fields_data INNER JOIN bb3_profile_fields_lang ON bb3_profile_fields_data.pf_kfz_stat = bb3_profile_fields_lang.option_id + 1 WHERE bb3_profile_fields_lang.lang_value LIKE '462 auf MB, Modelljahr 1973 bis 1975'";
Ach - vielleicht auch interessant: mysql 5.0.70 mit mysqli-Erweiterung, php-Version 5.2.9-pl2-gentoo, phpbb 3.0.5

Re: SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler

Verfasst: 20.10.2009 00:25
von gn#36
Hast du das Skript vielleicht mal irgendwo (z.b. im Pastebin)? Ohne ist das denke ich schwierig.

Re: SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler

Verfasst: 20.10.2009 10:33
von Dr.Death
Hallo,

der Fehler wird evtl. das direkte Ansprechen der Datenbank Tabellen sein.

Da Du interne phpBB3 Funktionen für die SQL Abfrage nutzt, solltest Du mal versuchen die Tabellen richtig anzusprechen und ggf. vorher in der Datei includes/constants.php zu definieren.

Beispiel:

Code: Alles auswählen

$abfrage = '    SELECT DISTINCT     user_id 
            FROM                 ' . PROFILE_FIELDS_DATA_TABLE . ' pf
            INNER JOIN             ' . PROFILE_FIELDS_LANG_TABLE . ' pfl
                ON                 pf.pf_kfz_stat = pfl.option_id + 1 
            WHERE                 pfl.lang_value LIKE'; 

Re: SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler

Verfasst: 20.10.2009 19:47
von Reisemobilist
Dr.Death hat geschrieben:der Fehler wird evtl. das direkte Ansprechen der Datenbank Tabellen sein.
:oops: Ich gebe zu, der Fehler saß zwischen meinen Ohren :oops:
Zur Entwarnung: es gehen beide Varianten - meine Originale (siehe ganz oben) und die von Dr.Death.

Ich hatte eine blöde Zeile aus den 2260 Zeilen übersehen. Ich war mir ganz sicher, alle Abfragen gegen die $abfrage-Variable ausgetauscht zu haben - aber da hat mich die Suchen-und-Ersetzen-Funktion irgendwie überlistet. :D Nun dürft ihr über mich herfallen.

Trotzdem oder gerade wegen seiner Erklärung möchte ich ein Herzliches Dankeschön an Dr.Death richten - seine kurze Antwort hat mir mehr Erleuchtung gebracht als 10 Stunden "Lese-Studium". Und nur deshalb konnte ich den Fehler überhaupt finden. Ich hatte schon jede einzelne Zeile auf das abschließende Semikolon überprüft, alle Abfragen noch einmal gelesen - aber irgendwann ist alles verschwommen. Das kennt ihr bestimmt.

An euch echte Profis von einem echten Laien: Ich habe eigentlich nicht wirklich Ahnung von PHP und SQL, war also richtig froh, dass Ich mir mühsam die SQL-Abfrage zusammengebastelt habe. Manchmal hilft dann ein kleiner Kick von euch um den letzten Schliff zu bekommen. DANKE für eure Unterstützung.

Re: SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler

Verfasst: 20.10.2009 20:42
von gn#36
Da brauchst du dich gar nicht zu schämen, ich glaube jeder der von sich behaupten kann sich gut mit sowas auszukennen hat schon mal einen richtig blöden Fehler gemacht (wie z.b. ein Semikolon nach einer if Abfrage, eine nicht definierte Konstante, eine unsichtbare Endlosschleife ...) und den dann richtig lange gesucht bis er ihm irgendwann wie Schuppen von den Augen fiel.