Vinzenz Mai: MySQL Datenbank durchsuchen

Beitrag lesen

Hallo,

meine MySQL-Kentnisse sind noch sehr jung und lückenhaft,

das stimmt :-)

aber könnte es sein, dass diese Bedingung von Dir missverstanden wird?

WHERE ("txt_opener" LIKE "%gg%" AND "%jj%")

das stimmt ebenfalls,

Dein Statement (ja, dieser Ausschnitt) bedeutet nach meinem Verständnis
'Datensätze für die gilt, dass "txt_opener" (ein String, keinesfalls ein Spaltenname!)

das stimmt nicht (nicht immer),

ähnlich zu "%gg%" ist (es muss "gg" darin enthalten sein)

das kann stimmen oder auch nicht: es könnte auch bedeuten: Der Inhalt der Spalte txt_opener muss ähnlich zum Inhalt der Spalte %gg% sein.

und es muss "%jj%" auch noch erfüllt sein (was auch immer das sein soll).'

Entweder die Zeichenkette %jj% wird in einem boolschen Kontext ausgewertet und ist somit wahr oder es wird der Inhalt der Spalte %jj% ausgewertet, der wahr oder falsch sein kann. Vermutlich wird's die Spalten nicht geben und zu einer Fehlermeldung kommen ...

Ich hätte jetzt zuersteinmal die Spaltennamen in Backticks eingeschlossen (z.B. txt\_opener anstatt "txt_opener") und die AND-Verknüpfung hätte ich nicht nur mit einem String, sondern mit einem echten zweiten Ausdruck mit LIKE-Operator versehen:

Backtickitis ist eine üble MySQL-Krankheit :-(
Man kann sie mit dem SQL-Modus ANSI_QUOTES heilen :-)

Auch für Dich, Felix:
Es ist eine gute Idee, in SQL Zeichenketten *ausschließlich* in einfache Anführungszeichen einzuschließen.

In Beispielcode ist es eine sehr gute Idee, solche Spaltennamen zu verwenden, die nicht gequoted werden müssen - und sie auch nicht zu quoten.

Bei generiertem Code ist es dagegen eine gute Idee, Schema Object Names grundsätzlich zu quoten - und dies einer Funktion zu überlassen, die dies für das verwendete DBMS richtig macht.

Freundliche Grüße

Vinzenz