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.