Wie arbeiten mit Eingaben die "&" enthalten?

Hallo community,
ich habe momentan ein kleines Problem. Ich arbeite mit einer Tabelle, deren Primary Key blöder Weise Sonderzeichen enthalten kann. Also zum Beispiel:
„Tom & Jerry“.
Jetzt habe ich das Problem:
Wenn ich mit PHP die Daten auslesen will, dann wird nur nach „Tom“ gesucht.
Beispiel:
SELECT * from movies WHERE name =‚TOM & JERRY‘.
Also eigentlich sind hier ja die hochkommatas dabei ‚…‘ aber irgendwie wird trotzdem nur TOM ausgegeben.
Gibts da eine php Funktion, die solche Sonderzeichen irgendwie „escaped“. So dass Sie die mysql query nicht beeinflussen?

Dieses Zeichen beeinflußt nicht die SQL Abfrage. Das Problem muss woanders liegen, wandelst du das Zeichen um?

Das kaufmännische Und (ampersand) wird von MySQL als Operator verwendet. Daher ist es so nicht im Statement zulässig. Escape es.

In welcher Version? Bei mir funktioniert das einwandfrei.

Sicher, dass Du „&“ verwendest? Mit „&“ wäre es was anderes :wink: Habs eben mit MySQL 4 per phpmyadmin getestet. Der wandelt das & in & um, so wie ich es auch machen würde.

Nein ich hab es in der Konsole mit einem Perlskript getestet und im Browser mit einem PHP Skript. Beide kommen mit der obigen Angabe 1:1 zu recht und finden Tom & Jerry

Ach so: Und mit phpmyadmin habe ich es auch getestet. Wie siehst du, dass da was umgewandelt wurde?

Sehe ich weil das Statement oben drüber wieder ausgegeben wird.

Zum Ampersand als Bit-Operator findet sich auch einiges:
MySQL Tutorial: Using Expressions in MySQL Statements
Ampersand - Wikipedia, the free encyclopedia

Ja bei mir steht die Zeichenkette auch da, aber exakt in der Form wie ich es eingeben habe. Wie kommst du darauf, dass es umgewandelt wurde? Dann würde die abfrage ja kein Ergebnis zeigen.

Da das Und Zeichen in einer Zeichenkette steht passiert da auch nichts, es wird nichts verändert. Soweit ich das sehe kann man das Ampersand als logisches Und verwenden in der doppelten Form.

Die abfrage oben von Don83 ist gültig und funktioniert einwandfrei.

Ich hatte letztens so ein ähnliches Problem… um der Performance wegen, war ich gezwungen Dateinamen per get zu übermitteln… das Problem war… manchmal hatte der dateiname ein & drine… z.B. Kevin & Tom

$_GET[‚file‘] würde dann „Kevin“ entsprechen… und mehr nicht…

Das Problem habe ich dann mit urlencode gelöst. Aus & wurde ein, ich glaube: %DC … ist wie „leerzeichen“ → %20 oder Anführungszeichen %22 ( " ).

Und mit urldecode , wird aus %DC → & . Leider hatte ich noch Probleme, da die Datenbank per UTF8 und die Seite mit dem standart ISO war… deshalb musste ich statt „urldecode“ → „utf8_decode“ verwenden.

Eventuell hilft dir das weiter…

Das macht in der Regel der Browser von ganz alleine, zudem hätte Don uns in dem Fall etwas vorenthalten, weil dann die Abfrage nicht so ausgesehen hätte.

Aber du hast insofern recht, dass Sonderzeichen in der URL dekodiert werden müssen (was aber, wie gesagt, die Browser sowieso von alleine machen)