Backticks in einer Variable

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
Frank Ehrlacher [ Di, 27 März 2007 18:22 ] [ ID #1669861 ]

Re: Backticks in einer Variable

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.
Christian Kirsch [ Di, 27 März 2007 18:39 ] [ ID #1669863 ]

Re: Backticks in einer Variable

Christian Kirsch schrieb:
>
> ein einfaches Anführungszeichen oder auch Apo'stroph.

Nicht zu verwechseln mit dem Kata'stroph *SCNR*

Grüße,
Dominik
Dominik Echterbruch [ Di, 27 März 2007 19:52 ] [ ID #1669867 ]

Re: Backticks in einer Variable

"Christian Kirsch" <ck [at] bru6.de> schrieb im Newsbeitrag
news:460948de$0$23135$9b4e6d93 [at] 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 ...
Frank Ehrlacher [ Di, 27 März 2007 20:31 ] [ ID #1669873 ]

Re: Backticks in einer Variable

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
Helmut Chang [ Di, 27 März 2007 20:41 ] [ ID #1669875 ]

Re: Backticks in einer Variable

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
Carsten Wiedmann [ Di, 27 März 2007 20:56 ] [ ID #1669876 ]

Re: Backticks in einer Variable

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
Carsten Wiedmann [ Di, 27 März 2007 20:56 ] [ ID #1670217 ]

Re: Backticks in einer Variable

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
Sebastian Suchanek [ Mi, 28 März 2007 08:16 ] [ ID #1671168 ]

Re: Backticks in einer Variable

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
GreenRover [ Mo, 02 April 2007 15:42 ] [ ID #1676178 ]

Re: Backticks in einer Variable

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
Kai Ruhnau [ Mo, 02 April 2007 16:32 ] [ ID #1676179 ]

Re: Backticks in einer Variable

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
Kai Ruhnau [ Mo, 02 April 2007 16:43 ] [ ID #1676180 ]

Re: Backticks in einer Variable

> 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.
Frank Ehrlacher [ Mi, 04 April 2007 00:07 ] [ ID #1677683 ]
Datenbanken » de.comp.datenbanken.mysql » Backticks in einer Variable

Vorheriges Thema: CREATE TABLE
Nächstes Thema: Mysql stoppt beim Start bei InnoDB-Scan / Recovery