SQL-Abfrage wird in UPPER CASE umgewandelt - dadurch Fehler
Verfasst: 19.10.2009 20:19
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:
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:
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(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
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:
Ach - vielleicht auch interessant: mysql 5.0.70 mit mysqli-Erweiterung, php-Version 5.2.9-pl2-gentoo, phpbb 3.0.5
"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'";
Code: Alles auswählen
Allgemeiner Fehler
SQL ERROR [ mysqli ]
Table 'sqldb1.BB3_PROFILE_FIELDS_DATA' doesn't exist [1146]
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';
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';
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'";