Path: csiph.com!aioe.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: k@rl.pflaesterer.de (Karl =?utf-8?Q?Pfl=C3=A4sterer?=) Newsgroups: de.comp.lang.php Subject: Re: Objekt auftrennen zum speichern Date: Mon, 27 Jul 2015 18:20:30 +0200 Lines: 60 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net zrt0h3Dy4H2zaAVg2qGE3wDt/hixgml0b8zFxhZ/phdrjTvz8= Cancel-Lock: sha1:o7uM5apSMIODU/Be0pE+lvCDXrY= sha1:m3l3NQocAVe8NhA5kzjXVnnWyaM= User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (darwin) Xref: aioe.org de.comp.lang.php:3450 Jan Novak writes: >> Der Hintergrund meiner Frage ist der, dass ich diese Daten in die >> Datenbank schreiben will. Die Datenbankfelder haben die gleichen Namen >> wie die Variablen. Ich habe mir eine generische Funktion geschrieben, >> welche daraus einen SQL String baut. Jedoch dürfen keine KIND Klassen am >> Objekt hängen, sonst würde diese Funktion ja auch diese in den SQL >> String einbauen). >> Vorher hatte ich diese ellen langen immer wiederkehrenden Befehle: >> $sql = 'insert into tabelle (feld1, ...) values (wert1, ...) >> Das würde dann meine Funktion machen. > > Ich vergaß, dies ist mein erster Ansatz: > Jedoch landen dannim SQL String auch Sachen, die nicht reingehören (weil Sie > als eine Property der Klasse A sind) > > > function create_insertSQL($table, $data){ > > if(is_object($data)){ > $datalocal = dismount_local_object($data); > } else { > $datalocal = $data; > } > > $sql = 'insert into '. $table . '( '; > $n=0; > foreach ($datalocal as $key => $value) { > $n++; > if (! is_array($key)) { > $sql = $sql . ' ' . $key; > if ($n } > } > > $n=0; > $sql = $sql . ') values ( '; > foreach ($datalocal as $key => $value) { > $n++; > if (! is_array($value)) { > $sql = $sql . ' "' . $value.'" '; > if ($n } > } > $sql = $sql . ') '; > return $sql; > > } Zwar wissen wir vieles nicht, was sinnvoll wäre, um dir helfen zu können, aber nur soviel: Ich denke dein Ansatz ist einfach nicht der Richtige, dies merkst du spätestens jetzt. Bevor du versuchst Symptome zu beheben, kuriere lieber die Ursache (Architektur). Nur als Beispiel: wenn man so wie du SQL zusammenbaut, ist fast immer etwas falsch (fehlende Maskierung, das Problem mit dem Komma am Ende, «"» als Textbegrenzer, keine Unterscheidung nach Datentyp ...).