phpbar.de logo

Mailinglisten-Archive

Re: mysql Api Propleme mit ESCAPE
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mysql Api Propleme mit ESCAPE



Andreas Küster schrieb am Freitag, den 13. August 1999:
> Wenn Ich ein backslash (\) in ein varchar (oder char - feld)
> eintragen will bekomme ich nur Fehlermeldungen.

Du mußt zwei Sachen im Auge halten:
1.) Wie muß die SQL-Query für MySQL aussehen, damit solche Zeichen
    richtig ankommen.
2.) Wie muß ich das im Rahmen der verwendeten Programmiersprache
    oder sonstigen Umgebung schreiben, damit es tatsächlich wie
    in 1.) gewünscht ankommt.
    
Zum ersten Punkt "Wie braucht's MySQL?" gibt's das MySQL-Handbuch
im Kapitel "7.1.1 Strings" Auskunft.  Bitte lesen! :)

> [...] mit einem "SELECT 'Test\\';" probiert
> wenn ich den querey direkt unter mysql in der shell absetze bekomme
> ich das erwartete resultat
> "Test\"

Was Du im Programm "mysql" eingibst, kommt auch wirklich so bei MySQL
an.  Deshalb mußt Du nur Punkt 1) beachten.

> wenn ich dagegen genau den selben query innerhalb einer API (konkret
> unter Perl) einsetze bekomme ich nur eine Fehlermeldung.

Perl aber hat seine eigenen Quotingregeln, die zu beachten sind:
   $s = '\\';  # Jetzt enthält $s _einen_ Backslash!
   $query = "SELECT 'Test\\\\'";
Die am wenigsten gegen Fehler anfällig Schreibweise in Perl für
Stringkonstante, die Apostrophe enthalten sollen (wie oft bei
SQL-Queries der Fall), ist vielleicht:
   $query = q{SELECT 'Test\\\\'}";
Für den doppelten Backslash muß man allerdings weiterhin 4 Stück
schreiben.  Details zu Perls Quoting siehe in der Man-Page
(man perlop), Abschnitt "Quote and Quote-like Operators".

> Der gleiche Fehler ist auch innerhalb von PHPmyAdmin reproduzierbar. Wenn
> ich dort diesen query eintrage bekomme ich nur die Fehlermeldung:
> 
> MySQL said: You have an error in your SQL syntax near ''Hallo\' ;' at line 1 

Das ist dann ein Mangel von phpMyAdmin, weil das eigentlich für das
richtige Quoting sorgen _sollte_, so daß Du Dir keine Gedanken machen
mußt.  (Könnte auch mit der Konfiguration von PHP zu haben, ob dort
magic_quote an oder aus ist ...)
Vermutlich schaffst Du es, indem Du vier Backslashes schreibst.

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ >
PGP KeyID=0xE8EF4F75 FiPr=52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive