tag:forum.selfhtml.org,2005:/self MySQL, INSERT: Feldinhalt / Feldname vertauscht – SELFHTML-Forum 2005-12-13T18:04:11Z https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906151#m906151 mattfi hello@nexus-solutions.de http://www.nexus-solutions.de 2005-12-13T16:36:02Z 2005-12-13T16:36:02Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>An die nachfolgende Datei übergebe ich Formulardaten über die URL, und das funktioniert auch.<br> Code:</p> <p>formular.php?term=Bobbycar&id_gebiet=5&def=Spielzeugauto&anm=Keine&quelle=Q&submit=Hinzuf%FCgen</p> <p>Anschließende lese ich diese Daten per GET aus und stecke sie in Variable:</p> <p>$term = $_GET['term'];<br>     $id_gebiet = $_GET['id_gebiet'];<br>     $def = $_GET['def'];<br>     $anm = $_GET['anm'];<br>     $quelle = $_GET['quelle'];</p> <p>Es ist mir klar, dass ich auch mit den GET-Abfragevariablen direkt weiterarbeiten könnte, aber ich will erstmals keine Hochkommafehler riskieren.<br> Jetzt will ich diese plus zwei weitere Werte in die Datenbank schreiben:</p> <p>$sql_write = "INSERT INTO DEF<br>                 (ID_GEBIET, DEF, ANM, Q_DEF, Status, Autor)<br>               VALUES<br>                 ($id_gebiet, $def, $anm, $quelle, '0', 'MattFi')";</p> <p>mysql_db_query(MYSQL_DATABASE, $sql_write) or die(mysql_error());</p> <p>Nun kriege ich die Fehlermeldung:<br> "Unknown column 'Spielzeugauto' in 'field list'".</p> <p>Sehr witzig. Wieso vertauscht SQL den Feldnamen $def mit dem Feldinhalt Spielzeugauto ?</p> <p>Ich bitte um Hilfe,<br> mattfi</p> https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906153#m906153 Axel a_hooge@web.de 2005-12-13T16:42:29Z 2005-12-13T16:42:29Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>Hallo,</p> <blockquote> <p>Nun kriege ich die Fehlermeldung:<br> "Unknown column 'Spielzeugauto' in 'field list'".</p> <p>Sehr witzig. Wieso vertauscht SQL den Feldnamen $def mit dem Feldinhalt Spielzeugauto ?</p> </blockquote> <p>weil Du diejenigen Variablen, für die das entsprechende Datenbankfeld als Text (Oder Varchar o.ä.) definiert ist, in Hochkommata setzen musst.</p> <p>$sql_write = "INSERT INTO DEF<br>                 (ID_GEBIET, DEF, ANM, Q_DEF, Status, Autor)<br>               VALUES<br>                 ($id_gebiet, '$def', '$anm', '$quelle', '0', 'MattFi')";</p> <p>Ich nehme an, $id_gebiet ist numerisch, daher dort keine Hochkommata.</p> <p>Schöne Grüße<br> Axel</p> https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906152#m906152 Vinzenz Mai vinzenzmai@web.de 2005-12-13T18:04:11Z 2005-12-13T18:04:11Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>Hallo</p> <blockquote> <p>Es ist mir klar, dass ich auch mit den GET-Abfragevariablen direkt weiterarbeiten könnte, aber ich will erstmals keine Hochkommafehler riskieren.</p> </blockquote> <p>Du solltest unbedingt über den Einsatz von <a href="http://www.php.net/manual/de/function.mysql-real-escape-string.php" rel="nofollow noopener noreferrer">mysql_real_escape_string()</a> nachdenken.</p> <pre><code class="block language-php"> <span class="token operator">></span> <span class="token variable">$sql_write</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"INSERT INTO DEF > (ID_GEBIET, DEF, ANM, Q_DEF, Status, Autor) > VALUES > (<span class="token interpolation"><span class="token variable">$id_gebiet</span></span>, <span class="token interpolation"><span class="token variable">$def</span></span>, <span class="token interpolation"><span class="token variable">$anm</span></span>, <span class="token interpolation"><span class="token variable">$quelle</span></span>, '0', 'MattFi')"</span><span class="token punctuation">;</span> </code></pre> <p>Siehe dazu <a href="https://forum.selfhtml.org/?t=119714&m=768221" rel="noopener noreferrer">Sven Rautenbergs</a> Ausführungen in der aktuellen Forumshauptdatei, bitte auch noch das Posting von dedlfix lesen. Und selbstverständlich gibts darüber viel im Archiv.</p> <p>Freundliche Grüße</p> <p>Vinzenz</p> https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906154#m906154 mattfi hello@nexus-solutions.de http://www.nexus-solutions.de 2005-12-13T16:54:04Z 2005-12-13T16:54:04Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>Danke, Axel.</p> <blockquote> <p>weil Du diejenigen Variablen, für die das entsprechende Datenbankfeld als Text (Oder Varchar o.ä.) definiert ist, in Hochkommata setzen musst.</p> </blockquote> <p>Allerdings verstehe ich nicht, warum dem so ist. SQL *soll* ja die Variablen parsen, und wenn es das tut, dann findet es natürlich den zugewiesenen Wert, aber eben als Wert, also als VALUE im SQL-Statement, und nicht als Spaltenüberschrift!?</p> https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906155#m906155 Axel a_hooge@web.de 2005-12-13T16:57:57Z 2005-12-13T16:57:57Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>Hallo,</p> <blockquote> <p>Allerdings verstehe ich nicht, warum dem so ist. SQL *soll* ja die Variablen parsen, und wenn es das tut, dann findet es natürlich den zugewiesenen Wert, aber eben als Wert, also als VALUE im SQL-Statement, und nicht als Spaltenüberschrift!?</p> </blockquote> <p>Nun, das Problem ist, das NICHT SQL die Variablen parst, sondern PHP. Wenn Du diesen Ausdruck hast:<br> $sql_write = "INSERT INTO DEF<br>                 (ID_GEBIET, DEF, ANM, Q_DEF, Status, Autor)<br>               VALUES<br>                 ($id_gebiet, $def, $anm, $quelle, '0', 'MattFi')";<br> und der Einfachheit nehmen wir an, alle 4 Variablen haben dn Inhalt "test", dann würde beim SQL-Server folgende Anfrage ankommen:</p> <p>INSERT INTO DEF (ID_GEBIET, DEF, ANM, Q_DEF, Status, Autor)<br> VALUES (test, test, test, test, '0', 'MattFi')</p> <p>Da vermag er dann nicht mehr zu unterscheiden, ob eine Spalte oder ein Wert gemeint ist und geht vom ersten Fall aus. Das Verhalten ist ja in PHP ebenso. Wenn Du in PHP einen Ausdruck hat :</p> <p>$variable = test;</p> <p>geht PHP davon aus, das test eine Konstante ist und wirft einen Fehler. Er geht nicht automatisch davon aus, dass es sich hier um einen Wert handeln könnte.</p> <p>Schöne Grüße<br> Axel</p> https://forum.selfhtml.org/self/2005/dec/13/mysql-insert-feldinhalt-feldname-vertauscht/906156#m906156 mattfi hello@nexus-solutions.de http://www.nexus-solutions.de 2005-12-13T17:12:25Z 2005-12-13T17:12:25Z MySQL, INSERT: Feldinhalt / Feldname vertauscht <p>Alles klar, danke!<br> Einleuchtendes Beispiel...</p>