Backticks in einer Variable
Backticks in einer Variable
am 27.03.2007 18:22:25 von Frank Ehrlacher
Hallo,
ich habe folgendes Problem:
Habe in einem PHP-Script ein MySQL-Statement a la
"SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
(ich weiß, hier kann ich die Backticks weglassen)
Das ganze läuft hervorragend, wenn in $zeile[2] der Name "Müller", "Meier"
oder "Schmitz" gespeichert ist ... beim englischen "O'Leary" kommt aber ein
wenig freundliches
Fehlermeldung=You have an error in your SQL syntax near 'Leary'' at line 1
Nun habe ich inzwischen herausgefunden, dass das wohl am Backtick im
Variableninhalt=Namen liegt. Allerdings kann ich den guten ja nicht
umtauschen. Die "PHP-Klassiker" urlencode() und htmlentities() helfen
nichts. Weiß jemand Rat?
Danke
Frank
Re: Backticks in einer Variable
am 27.03.2007 18:39:58 von Christian Kirsch
Frank Ehrlacher schrieb:
> Hallo,
> ich habe folgendes Problem:
> Habe in einem PHP-Script ein MySQL-Statement a la
>
> "SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
>
> (ich weiß, hier kann ich die Backticks weglassen)
>
Hast Du ja auch getan. Allerdings wirkt SELECT niemals auf Datenbanken,
sondern nur auf Tabellen.
> Das ganze läuft hervorragend, wenn in $zeile[2] der Name "Müller", "Meier"
> oder "Schmitz" gespeichert ist ... beim englischen "O'Leary" kommt aber ein
> wenig freundliches
> Fehlermeldung=You have an error in your SQL syntax near 'Leary'' at line 1
Dann musst Du wohl quoten. Wie das geht, sollte Dir das
PHP-MySQL-API-Handbuch sagen können.
>
> Nun habe ich inzwischen herausgefunden, dass das wohl am Backtick im
> Variableninhalt=Namen liegt.
Da ist kein Backtick. Ein Backtick ist das hier: `. Was Du meinst, ist
ein einfaches Anführungszeichen oder auch Apo'stroph.
Re: Backticks in einer Variable
am 27.03.2007 19:52:52 von Dominik Echterbruch
Christian Kirsch schrieb:
>
> ein einfaches Anführungszeichen oder auch Apo'stroph.
Nicht zu verwechseln mit dem Kata'stroph *SCNR*
Grüße,
Dominik
Re: Backticks in einer Variable
am 27.03.2007 20:31:11 von Frank Ehrlacher
"Christian Kirsch" schrieb im Newsbeitrag
news:460948de$0$23135$9b4e6d93@newsspool1.arcor-online.net.. .
> Frank Ehrlacher schrieb:
>> Hallo,
>> ich habe folgendes Problem:
>> Habe in einem PHP-Script ein MySQL-Statement a la
>>
>> "SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
>>
>> (ich weiß, hier kann ich die Backticks weglassen)
>>
>
> Hast Du ja auch getan. Allerdings wirkt SELECT niemals auf Datenbanken,
> sondern nur auf Tabellen.
>
>> Das ganze läuft hervorragend, wenn in $zeile[2] der Name "Müller",
>> "Meier"
>> oder "Schmitz" gespeichert ist ... beim englischen "O'Leary" kommt aber
>> ein
>> wenig freundliches
>> Fehlermeldung=You have an error in your SQL syntax near 'Leary'' at line
>> 1
> Da ist kein Backtick. Ein Backtick ist das hier: `. Was Du meinst, ist
> ein einfaches Anführungszeichen oder auch Apo'stroph.
Stimmt , aber warum habe "ich" dann das Problem? Taucht das bei Apo'strophen
auch auf?
> Dann musst Du wohl quoten. Wie das geht, sollte Dir das
> PHP-MySQL-API-Handbuch sagen können.
Kannst Du mir vielleicht einen Tipp geben, in welchem Kapitel? Ich find des
nicht - und auch beim google'n finde ich nichts ... hiiilfe ...
Re: Backticks in einer Variable
am 27.03.2007 20:41:45 von Helmut Chang
Frank Ehrlacher schrieb:
>> Dann musst Du wohl quoten. Wie das geht, sollte Dir das
>> PHP-MySQL-API-Handbuch sagen können.
>
> Kannst Du mir vielleicht einen Tipp geben, in welchem Kapitel?
Evtl. bei den MySQL-Funktionen?
gruss, heli
Re: Backticks in einer Variable
am 27.03.2007 20:56:59 von Carsten Wiedmann
Frank Ehrlacher schrieb:
> Habe in einem PHP-Script ein MySQL-Statement a la
Womit du eigentlich schonmal (halb) in der falschen Gruppe bist.
> "SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
>
> Das ganze läuft hervorragend, wenn in $zeile[2] der Name "Müller",
> "Meier" oder "Schmitz" gespeichert ist ... beim englischen "O'Leary"
> kommt aber ein wenig freundliches
> Fehlermeldung=You have an error in your SQL syntax near 'Leary'' at line 1
Soweit es diese Gruppe hier angeht, findest du die Antowort in [1]:
Du musst das Zeichen escapen.
Da du ja aber mit PHP arbeitest:
Im PHP-Manual, im Kapitel zu den MySQL-Funktion, befindet sich in der
Übersicht auch eine Funktion [1], die dem Namen nach etwas mit escapen zu
tun haben muss.
xpost&fup2 de.comp.lang.php.datenbanken
Gruß
Carsten
[1] http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html
[2] http://de.php.net/manual/en/function.mysql-real-escape-strin g.php
Re: Backticks in einer Variable
am 27.03.2007 20:56:59 von Carsten Wiedmann
Frank Ehrlacher schrieb:
> Habe in einem PHP-Script ein MySQL-Statement a la
Womit du eigentlich schonmal (halb) in der falschen Gruppe bist.
> "SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
>
> Das ganze läuft hervorragend, wenn in $zeile[2] der Name "Müller",
> "Meier" oder "Schmitz" gespeichert ist ... beim englischen "O'Leary"
> kommt aber ein wenig freundliches
> Fehlermeldung=You have an error in your SQL syntax near 'Leary'' at line 1
Soweit es diese Gruppe hier angeht, findest du die Antowort in [1]:
Du musst das Zeichen escapen.
Da du ja aber mit PHP arbeitest:
Im PHP-Manual, im Kapitel zu den MySQL-Funktion, befindet sich in der
Übersicht auch eine Funktion [1], die dem Namen nach etwas mit escapen zu
tun haben muss.
xpost&fup2 de.comp.lang.php.datenbanken
Gruß
Carsten
[1] http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html
[2] http://de.php.net/manual/en/function.mysql-real-escape-strin g.php
Re: Backticks in einer Variable
am 28.03.2007 08:16:03 von Sebastian Suchanek
Frank Ehrlacher schrieb:
> Hallo,
> ich habe folgendes Problem:
> Habe in einem PHP-Script ein MySQL-Statement a la
>
> "SELECT irgendwas FROM datenbank WHERE name = '$zeile[2]' "
> [...]
Zusätzlich zu den ganzen Tips, die Du schon bekommen hast:
Überprüfe dringend das Sicherheitskonzept Deines PHP-Skripts.
Wenn das von einem einem harmlosen "O'Leary" schon aus der Bahn
geworfen wird, ist es mit vermutlich auch nicht gegen einen
Inhalt von $zeile[2] im Stil von "irgendwas; DROP DATABASE
datenbank" gefeit.
HTH,
Sebastian
Re: Backticks in einer Variable
am 02.04.2007 15:42:40 von GreenRover
Frank Ehrlacher schrieb:
> Nun habe ich inzwischen herausgefunden, dass das wohl am Backtick im
> Variableninhalt=Namen liegt. Allerdings kann ich den guten ja nicht
> umtauschen. Die "PHP-Klassiker" urlencode() und htmlentities() helfen
> nichts. Weiß jemand Rat?
Versuche doch mal einen weitere Klassicker:
http://de.php.net/manual/de/function.addslashes.php
Oder gib deinem htmlentities() als 2ten Parameter ein: ENT_QUOTES mit.
Oder wenn man es ganz interessant haben will:
http://de.php.net/manual/de/function.mysql-real-escape-strin g.php
Re: Backticks in einer Variable
am 02.04.2007 16:32:02 von Kai Ruhnau
Heiko (GreenRover) Henning wrote:
> Frank Ehrlacher schrieb:
>> Nun habe ich inzwischen herausgefunden, dass das wohl am Backtick im
>> Variableninhalt=Namen liegt. Allerdings kann ich den guten ja nicht
>> umtauschen. Die "PHP-Klassiker" urlencode() und htmlentities() helfen
>> nichts. Weiß jemand Rat?
>
>
> Versuche doch mal einen weitere Klassicker:
> http://de.php.net/manual/de/function.addslashes.php
>
> Oder gib deinem htmlentities() als 2ten Parameter ein: ENT_QUOTES mit.
>
> Oder wenn man es ganz interessant haben will:
> http://de.php.net/manual/de/function.mysql-real-escape-strin g.php
Das ist eine Dumme[tm] Idee.
Beide Funktionen kümmern sich nicht um den Zeichensatz der Verbindung.
Diese Informationen braucht man aber, wenn man bei
Multibyte-Zeichensätzen richtig escapen möchte.
Ein zweites Byte eines Zeichens könnte beispielsweise das gleiche sein,
wie für ein ASCII '. Escaped man dieses Byte, zerstört man das Zeichen
und damit die Daten. Das verhindert nur mysql_real_escape_string()
erfolgreich.
Grüße
Ka
Re: Backticks in einer Variable
am 02.04.2007 16:43:45 von Kai Ruhnau
Kai Ruhnau wrote:
> Heiko (GreenRover) Henning wrote:
>> Frank Ehrlacher schrieb:
>>> Nun habe ich inzwischen herausgefunden, dass das wohl am Backtick im
>>> Variableninhalt=Namen liegt. Allerdings kann ich den guten ja nicht
>>> umtauschen. Die "PHP-Klassiker" urlencode() und htmlentities() helfen
>>> nichts. Weiß jemand Rat?
>>
>> Versuche doch mal einen weitere Klassicker:
>> http://de.php.net/manual/de/function.addslashes.php
>>
>> Oder gib deinem htmlentities() als 2ten Parameter ein: ENT_QUOTES mit.
>>
>> Oder wenn man es ganz interessant haben will:
>> http://de.php.net/manual/de/function.mysql-real-escape-strin g.php
>
> Das ist eine Dumme[tm] Idee.
>
> Beide Funktionen kümmern sich nicht um den Zeichensatz der Verbindung.
Ups, wer lesen kann ist klar im Vorteil:
Irgendwie hab' ich übersehen, dass die zweite Funktion
mysql_real_escape_string ist.
s/Beide Funktionen kümmern/Die erste Funktion kümmert/
> Diese Informationen braucht man aber, wenn man bei
> Multibyte-Zeichensätzen richtig escapen möchte.
>
> Ein zweites Byte eines Zeichens könnte beispielsweise das gleiche sein,
> wie für ein ASCII '. Escaped man dieses Byte, zerstört man das Zeichen
> und damit die Daten. Das verhindert nur mysql_real_escape_string()
> erfolgreich.
>
> Grüße
> Ka
.... und wer schreiben kann...
Grüße
Kai
Re: Backticks in einer Variable
am 04.04.2007 00:07:45 von Frank Ehrlacher
> Soweit es diese Gruppe hier angeht, findest du die Antowort in [1]:
> Du musst das Zeichen escapen.
Peng ... ok, Danke, das hat geholfen. Brett vorm Kopf weg.