[PHP/MySQL] Query schlägt fehl?

bigtail

Ensign
Dabei seit
März 2003
Beiträge
159
Insert Into ??

Hi,
kann mir jemand erklären, warum das hier geht??


$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( '".$_POST["vorname"]."','".$_POST["name"]."',''".$_POST["email"]."' ) ");



Aber das hier nicht??


$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( $_POST['vorname'],$_POST['name'],$_POST['email'] ) ");


Danke
 

Loopo

Admiral
Dabei seit
Juli 2002
Beiträge
7.610
Re: Insert Into ??

hm es gibt ja 2 Unterschiede:
- beim einem werden die Variablen direkt in den String geschrieben, beim andern außerhalb
- zudem werden beim einen die Werte in Anführungszeichen geschrieben
ich nehm mal an, das ungültige Werte übergeben werden, da diese nicht in Anführungszeichen stehen

probier doch mal das aus:
$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( '$_POST['vorname']','$_POST['name']','$_POST['email'] )' ");
 

oDeM

Lt. Junior Grade
Dabei seit
Sep. 2002
Beiträge
374
Re: Insert Into ??

strings werden in SQL immer in singlequotes geschrieben
integers und SQL eigene Funktionen brauchen keine quotes
 

bigtail

Ensign
Ersteller dieses Themas
Dabei seit
März 2003
Beiträge
159
Re: Insert Into ??

Ok, dass die Strings in Hochkomms stehen müssen, geht klar.

Aber wozu dann noch die Anführungszeichen und vor allem wozu die Verbindungs-Punkte????
 

Loopo

Admiral
Dabei seit
Juli 2002
Beiträge
7.610
Re: Insert Into ??

kleines Beispiel:

PHP:
$var = 'schöner';
echo "Heute ist ein $var Tag.<br>";
echo 'Heute ist ein $var Tag.<br>';
als Ausgabe wirst du erhalten:

Heute ist ein schöner Tag.
Heute ist ein $var Tag.

Das PHP-Modul ersetzt in Strings, welche mit doppelten Anführungszeichen " gekennzeichnet sind, Variablen (zB $var) und Sonderzeichen (zB \n für Zeilenumbruch) durch ihren Wert. Bei einfachen Anführungszeichen ' geschieht dies nicht.

Durch den Punkt-Operator . werden Strings aneinander gefügt.
 

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
Re: Insert Into ??

Zitat von bigtail:
Hi,
kann mir jemand erklären, warum das hier geht??


$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( '".$_POST["vorname"]."','".$_POST["name"]."',''".$_POST["email"]."' ) ");



Aber das hier nicht??


$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( $_POST['vorname'],$_POST['name'],$_POST['email'] ) ");


Danke


versuch das:

PHP:
$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( $_POST[vorname],$_POST[name],$_POST[email] ) ");
 

Steffen

Technische Leitung
Teammitglied
Dabei seit
März 2001
Beiträge
14.092
Re: Insert Into ??

Zitat von pcwTJaR:
versuch das:

PHP:
$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( $_POST[vorname],$_POST[name],$_POST[email] ) ");
Alles, was keine Zahl ist, muss in einer Query in Anführungszeichen:
PHP:
$result = mysql_query (" INSERT INTO kunden ( Vorname,Name,Email ) VALUES ( '$_POST[vorname]', '$_POST[name]', '$_POST[email]' ) ");
Zudem darf man innerhalb eines Strings die Array-Keys nicht nochmal in Hochkommas einschließen, auch wenn außerhalb von Strings dadurch eine NOTICE-Meldung generiert würde. Das wäre falsch:
PHP:
$str = "Test $array['var1']";
Richtig:
PHP:
$str = "Test $array[var1]";
 

oDeM

Lt. Junior Grade
Dabei seit
Sep. 2002
Beiträge
374
oder man macht es folgendermaßen:

PHP:
$query = mysql_query("INSERT INTO TABLE (...) VALUES ('{$_POST["string1"]}', '{$_POST["string2"]}', {$_POST["integer"]}, SQL_EIGENE_FUNKTION());");
 
Zuletzt von einem Moderator bearbeitet:
Top