Hello,
Vielen Dank, das hat mir jetzt wirklich sehr weitergeholfen.
Bitte. Gerne geschehen. Es ist auch nicht immer sofort einsichtig, an welcher Stelle man schrauben soll. Sind die Daten aber erst "verkurbelt", kann man das selten wieder rückgängig machen.
Dass ich mir die Slashes in der Datenbank auch sparen kann, wusste ich noch nicht, wahrscheinlich hat da bei meinen ersten Erfahrungen mit diesen Sicherheitsvorkehrungen auch magic quotes für Verwirrung gesorgt. Das Problem wäre jedenfalls gelöst.
Eine Frage hätte ich aber noch. Wenn die Sucheingabe des Benutzers ein % oder ein _ enthält, werden in bestimmten Fällen mehr Ergebnisse gefunden als eigentlich sollten, weil diese in dem "LIKE"-Teil ja als Platzhalter für "eine beliebige Zeichenkette" bzw. "ein beliebiges einzelnes Zeichen" interpretiert werden. Wie verhindere ich das und ermögliche gleichzeitig, dass man Prozentzeichen und Underscores bei der Suche findet? Gibts da auch eine Möglichkeit, das irgendwie zu "escapen"?
Das ist eigentlich recht gut beschrieben unter
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
Es sind aus Anwendersicht zwei vollkommen verschiedene Suchvorgänge, ob sie eine von Dir vorgefertigte Suche benutzen sollen, die keine Joker zulässt, oder ob Du ihnen die Jokerzeichen (%_) zur Verfügung stellen willst.
Wenn Du nicht willst, dass der Benutzer selber die Ähnlichkeitssuche verwendet, obwohl Du aber im Hintergrund ein 'LIKE' einsetzt, dann musst Du die Bentuzereingaben escapen. Standardzeichen dafür wäre dann wieder der Backslash. Das kannst Du in Deiner Schnittstelle machen, indem Du jedes Vorkommen von '%' und '_' gegen '%' und '\_' in den Usereingaben austauschst. Vorher solltest Du aber schauen, ob bereits '' enthalten sind, denn manche User sind pfiffig.
Wenn '' allerdings zum Datentrom gehört, dann musst Du ein anderes Escape-Zeichen wählen und MySQL das durch die Klausel "ESCAPE 'Z'" mitteilen, wobei 'Z' hier für das von Dir gewählte Escape-Zeichen steht.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg