Mailinglisten-Archive |
Nadja Senoucci schrieb am Mittwoch, den 1. September 1999: > $anwid=mysql_query("select * from grunz where > (name="+chr(34)+$suchname+chr(34)+")"); > > Hier versuche ich mit ASCII-Code Konvertierung die > Anführungszeichen zu setzen, die MySQL haben will. Sieht eigentlich richtig aus ... > Ich kann keine richtigen Anführungszeichen (sprich: " ") setzten, da > php sonst die MySQL-Anweisung unterbricht. MySQL erkennt die > Anführungszeichen aber auf diese weise nicht (,da er den gesuchten > Namen, der 100%ig in der Tabelle steht nicht finden kann). Seltsam. Sind im Suchnamen selbst evtl. Sonderzeichen drin? Sonderzeichen im Rahmen von MySQL sind das einfache (') und doppelte (") Anführungszeichen (wegen der Quotingregeln), der Backslash (\) und die Binärnull (Zeichen mit ASCII-Code 0). Als Textbegrenzer kannst Du in MySQL übrigens beide Anführungszeichen verwenden, einfache und doppelte (in Standard-SQL nur einfache). Beschrieben ist das alles im MySQL-Handbuch im Kapitel "7.1 Literals: how to write strings and numbers". Unter anderem heißt es: »You should use an escape function on any string that might contain any of the special characters listed above!« (also ' " \ und Binärnull). In PHP gibt's dazu die Funktion AddSlashes()! Sollte man am besten immer verwenden, wenn man nicht 100%ig sicher ist, daß der Text 'sicher' (also ohne MySQL-Sonderzeichen ist). Die Pluszeichen in Deinem Beispiel deuten darauf hin, daß Du noch mit dem alten PHP/FI2 arbeitest, aber macht nix, dort gab's das auch schon. (Ein Unterschied ist aber z.B., daß man in PHP/FI2 Strings _nur_ mit doppelten Anführungszeichen begrenzen kann, in PHP3 gehen auch die einfachen.) Eine hübschere Version sieht dann also so aus: $quotedsuchname = AddSlashes($suchname); $anwid=mysql_query("SELECT * FROM grunz WHERE name='$quotedsuchname'"); In meinen Augen noch besser wird's mit sprintf: $sql = sprintf("SELECT * FROM grunz WHERE name='%s'", AddSlashes($suchname)); $anwid = mysql_query($sql); Fans von Einzeilern können ja nochmal zusammenfassen. :) Was ich nicht beantworten kann, ist, warum Deine Version oben nicht funktioniert ... Dazu müßte man evtl. einen Blick auf Dein Suchwort und auf den konkreten Tabelleninhalt werfen. > P.S.: Ich bin nicht so dämlich, wie es erscheinen mag! Ich sag' mir immer, daß zwischen damlich und unwissend/unerfahren ein ziemlich Unterschied ist und überhaupt: And all I know for sure All I know for real Is knowing doesn't mean so much -- Sisters Of Mercy in "Some Kind of Stranger" :-) Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ > PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7 When privacy is outlawed... only the outlaws have privacy.
php::bar PHP Wiki - Listenarchive