dedlfix: Warum kommt bei meinem Request ein assoziatives Array an?

Beitrag lesen

Hi!

Wenn ich dich richtig verstehe ist in $wert_input[$update_id] der Wert, der eingetragen ist. Du gibst aber $wert_input (Array) dann einen String "[" gefolgt von $update_id und noch einen String "]" ein. Also den String "Array[ID]".
Hm, irgendwie wills nicht in meinen Kopf hinein. Ich les es mir aber heute nachmittag nochmal durch, vielleicht klappts ja dann.

Du baust dir einen String aus $wert_input (wird zu "Array"), dem Zeichen [, dem Inhalt von $update_id und noch einem ] zusammen. Ein String ist allerdings kein PHP-Code. Wenn PHP auf ein Element eines Arrays zugreifen soll, benötigt es die Array-Element-Zugriffs-Syntax als Code und nicht als String.

Wenn Du wert = $wert_input[$update_id] haben willst, solltest Du das auch so benutzen: "wert="".$wert_input[$update_id]."""
Ja, das funktioniert.

Jein. Damit erzeugst du zunächst einmal den richtigen PHP-Code, um auf das Array-Element zuzugreifen. Aber du beachtest durch das direkte Einfügen nicht, dass sich als Inhalt in dem Array-Element Zeichen befinden können (vor allem Anführungszeichen), die die beabsichtigte Syntax des SQL-Statements stören können. Das führt günstigstenfalls nur zu Syntaxfehlern, lässt sich aber auch für SQL-Injection ausnutzen. Richtig für MySQL wäre sowas

"wert="" . mysql_real_escape_string($wert_input[$update_id]) . """

Es bleibt immer noch, dass die Übersichtlichkeit des ganzen Code-Konstrukts ziemlich leidet, wenn man Anführungszeichen maskieren muss und auch das Statement für das Einfügen von Werten unterbrechen muss. Deswegen mein Vorschlag, sprintf() zu nutzen. Außerdem kann man die Anführungszeichen geschickter wählen, so dass man sie nicht auch noch maskieren muss. In Standard-SQL nimmt man für Strings die einfachen Anführungszeichen, MySQL kommt damit auch problemlos zurecht. In PHP muss man diese innerhalb von ""-String auch nicht maskieren - das sind schon zwei Gründe, die für ihren Einsatz sprechen.

Lo!