String => Array

Hallo NG,

was muss ich beachten wenn ich einen String in einen Array schreibe und
danach in eine MySQL-Tabelle? Welche Zeichen muss ich ersetzen? Ich
glaube zu wissen, dass das Hochkomma (') den Array kaputt macht - sind
noch andere Dinge zu beachten?

Grüße Daniel
Daniel Schmidt [ Mi, 23 Januar 2008 02:17 ] [ ID #1916458 ]

Re: String => Array

..oO(Daniel Schmidt)

>was muss ich beachten wenn ich einen String in einen Array schreibe und
>danach in eine MySQL-Tabelle? Welche Zeichen muss ich ersetzen? Ich
>glaube zu wissen, dass das Hochkomma (') den Array kaputt macht

Dem Array tut das nichts, aber ein Hochkomma hat eine besondere
Bedeutung in SQL-Anfragen.

>- sind
>noch andere Dinge zu beachten?

Benutze mysql_real_escape_string() oder PDO (Prepared Statements), dann
brauchst Du Dir keine Gedanken um einzelne, möglicherweise "schädliche"
Zeichen zu machen.

Micha
Michael Fesser [ Mi, 23 Januar 2008 03:00 ] [ ID #1916459 ]

Re: String => Array

Daniel Schmidt wrote:

>was muss ich beachten wenn ich einen String in einen Array schreibe und
>danach in eine MySQL-Tabelle? Welche Zeichen muss ich ersetzen? Ich
>glaube zu wissen, dass das Hochkomma (') den Array kaputt macht - sind
>noch andere Dinge zu beachten?

Ich verstehe Deine Frage nicht so ganz. Ein Hochkomma macht nichts
kaputt und Du kannst (vermutlich) einen String auch in einen Array
schreiben, etwa

$a = array("Guten'Tag" => "Good'Day");

Das Hochkomma kann sowohl als Schlüssel als auch als Wert benutzt
werden. Da geht nichts "kaputt".

Bei der Datenbank-Query solltest Du generell die Abfragen vor
ungewollten Eingaben sichern, bei MySQL z.B. mittels

$result = $db->query(sprintf('
SELECT id
FROM user
WHERE name = "%s"
', mysql_real_escape_string($name))
);

oder Du liest

http://www.php.net/manual/de/ref.pdo.php

bzw. die entsprechende Dokumentation des Pakets, welches Du zum
Datenzugriff benutzt.

Schöne Grüße, Steffen
steffen bruentjen [ Mi, 23 Januar 2008 13:33 ] [ ID #1916465 ]

Re: String => Array

steffen bruentjen schrieb:
> Bei der Datenbank-Query solltest Du generell die Abfragen vor
> ungewollten Eingaben sichern, bei MySQL z.B. mittels
>
> $result = $db->query(sprintf('
> SELECT id
> FROM user
> WHERE name = "%s"
> ', mysql_real_escape_string($name))
> );
>
> oder Du liest
>
> http://www.php.net/manual/de/ref.pdo.php
>
> bzw. die entsprechende Dokumentation des Pakets, welches Du zum
> Datenzugriff benutzt.

um den OP nicht ganz zu verwirren. Die Funktion/Methode die genutzt
werden muss ist von der Schnittstelle abhängig mit welcher auf die
Datenbank zugreifst.

Das Beispiel oben ist MySQLi [1], das Beispiel von Michael ist MySQL
[2]. PDO [3] ist eine Alternative dazu, die beide genannt haben. Die
Datenbank ist immer die selbe => MySQL. (Bzw. bei PDO kann es auch jede
andere Datenbank sein, die unterstützt wird)

[1] http://php.net/mysql
http://www.php.net/manual/de/function.mysql-escape-string.ph p
[2] http://php.net/mysqli
http://www.php.net/manual/de/function.mysqli-real-escape-str ing.php
[3] http://php.net/pdo
http://www.php.net/manual/de/function.PDO-quote.php

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Mi, 23 Januar 2008 13:43 ] [ ID #1916466 ]

Re: String => Array

Christoph Herrmann wrote:
>steffen bruentjen schrieb:
>> Bei der Datenbank-Query solltest Du generell die Abfragen vor
>> ungewollten Eingaben sichern, bei MySQL z.B. mittels
>>
>> $result = $db->query(sprintf('
>> SELECT id
>> FROM user
>> WHERE name = "%s"
>> ', mysql_real_escape_string($name))
>> );
>>
>> oder Du liest
>>
>> http://www.php.net/manual/de/ref.pdo.php
>>
>> bzw. die entsprechende Dokumentation des Pakets, welches Du zum
>> Datenzugriff benutzt.
>
>um den OP nicht ganz zu verwirren. Die Funktion/Methode die genutzt
>werden muss ist von der Schnittstelle abhängig mit welcher auf die
>Datenbank zugreifst.
>
>Das Beispiel oben ist MySQLi [1], das Beispiel von Michael ist MySQL
>[2]. PDO [3] ist eine Alternative dazu, die beide genannt haben. Die
>Datenbank ist immer die selbe => MySQL. (Bzw. bei PDO kann es auch jede
>andere Datenbank sein, die unterstützt wird)

Nein, von MySQLi redete bisher niemand! :)

Schöne Grüße, steffen
steffen bruentjen [ Mi, 23 Januar 2008 13:56 ] [ ID #1916467 ]

Re: String => Array

steffen bruentjen schrieb:
>>> $result = $db->query(sprintf('
>>> SELECT id
>>> FROM user
>>> WHERE name = "%s"
>>> ', mysql_real_escape_string($name))
>>> );
> Nein, von MySQLi redete bisher niemand! :)

was ist dann $db->query()? MySQL besitzt keine Klassen. ;)

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Mi, 23 Januar 2008 14:06 ] [ ID #1916468 ]

Re: String => Array

Christoph Herrmann wrote:
>steffen bruentjen schrieb:
>
>>>> $result = $db->query(sprintf('
>>>> SELECT id
>>>> FROM user
>>>> WHERE name = "%s"
>>>> ', mysql_real_escape_string($name))
>>>> );
>> Nein, von MySQLi redete bisher niemand! :)
>
>was ist dann $db->query()? MySQL besitzt keine Klassen. ;)

Verstehe.. Das war eigentlich eine beliebige Abstraktionsklasse. Ist
aber so wohl ein bisschen inkonsequent.

Schöne Grüße, steffen
steffen bruentjen [ Mi, 23 Januar 2008 17:48 ] [ ID #1916471 ]

Re: String => Array

Hallo NG,

Wie und wo wende ich mysql_real_escape_string() genau an?
Brauche ich das für UPDATE, INSRERT und SELECT?

Das Manual sagt ich nutze fprint() wozu dies?

Eingabe:
mysql_query("UPDATE $sql_tabelle SET feld='%s',
mysql_real_escape_string($array)") OR die (mysql_error());

Ausgabe:
mysql_query("SELECT FROM $sql_tabelle WHERE feld='%s',
mysql_real_escape_string($array)") OR die (mysql_error());

so richtig?


Grüße Daniel
Daniel Schmidt [ Do, 24 Januar 2008 01:46 ] [ ID #1916479 ]

Re: String => Array

Ich sehe gerade Zeichen werden auf dem Server automatisch maskiert,
darum ist der array auch "kaputt" MySQL fügt ein \' vor das Hochkomma
und der Arrayinhalt Arraylänge stimmt nicht mehr - wenn ich nun den
Slash entferne ist das Array wieder lesbar.


Grüße Daniel
Daniel Schmidt [ Do, 24 Januar 2008 01:50 ] [ ID #1916480 ]

Re: String => Array

Daniel Schmidt wrote:

>Ich sehe gerade Zeichen werden auf dem Server automatisch maskiert,
>darum ist der array auch "kaputt" MySQL fügt ein \' vor das Hochkomma
>und der Arrayinhalt Arraylänge stimmt nicht mehr - wenn ich nun den
>Slash entferne ist das Array wieder lesbar.

Klingt nach http://de.php.net/magic_quotes.

Stell sie ab und benutze stattdessen eine der anderen genannten
Möglichkeiten.

.... warum ist das Array mit Backslashes nicht lesbar?

Schöne Grüße, Steffen
steffen bruentjen [ Do, 24 Januar 2008 10:02 ] [ ID #1916483 ]
PHP » de.comp.lang.php.misc » String => Array

Vorheriges Thema: Newbie Frage zu PHP Abfragen
Nächstes Thema: Funktion und Wertebereich von Variablen