INSERT scheint nicht zu funktionieren

INSERT scheint nicht zu funktionieren

am 27.12.2005 14:53:14 von joerg.zimmermann

Hallo zusammen,

ich versuche (als mehr kann man es im Moment leider nicht bezeichnen)
mit einem INSERT-Befehl aus php heraus einen Datensatz in einer Tabelle
zu schreiben. SELECT Statements funktionieren ohne Probleme. Unten ist
der Code zu finden. Kann mir jemand sagen, wo der Fehler stecken könnte?
Danke schon jetzt.

Jörg

Codeausschnitt:
//Eintrag in die Datenbank
$conn = mysql_connect("db410.1und1.de", "dboxxxxxxxxx", "xxxxxxx")
or die("Verbindungsfehler: ".mysql_error());
mysql_select_db("xxxxxxxxxxxxx",$conn);
$sql="INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
'Veranstalter', 'Zeiten', 'Titel')
VALUES ('', '$Beginn', '$Ende', '$Beschreibung', '$Ort', '$Veranstalter',
'$Zeiten', '$Titel');";
$result=mysql_query($sql);
mysql_close();

Der INSERT-Befehl sieht dann so aus (mit echo ausgegeben):
INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
'Veranstalter', 'Zeiten', 'Titel') VALUES ('', '20060101', '20060102', 'ja
ja ja', 'Ort der Veranstaltung', 'Veranstalter', '10.00 Uhr 20 Uhr', 'neue
veranstaltung');

Re: INSERT scheint nicht zu funktionieren

am 27.12.2005 15:06:32 von Joerg Behrens

Needful Bytes (Jörg Zimmermann) schrieb:
> Hallo zusammen,
>
> ich versuche (als mehr kann man es im Moment leider nicht bezeichnen)
> mit einem INSERT-Befehl aus php heraus einen Datensatz in einer Tabelle
> zu schreiben. SELECT Statements funktionieren ohne Probleme. Unten ist
> der Code zu finden. Kann mir jemand sagen, wo der Fehler stecken könnte?
> Danke schon jetzt.
>
> Jörg
>
> Codeausschnitt:
> //Eintrag in die Datenbank
> $conn = mysql_connect("db410.1und1.de", "dboxxxxxxxxx", "xxxxxxx")
> or die("Verbindungsfehler: ".mysql_error());

Eine Fehlerbehandlung... schoen.

> mysql_select_db("xxxxxxxxxxxxx",$conn);
> $sql="INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
> 'Veranstalter', 'Zeiten', 'Titel')
> VALUES ('', '$Beginn', '$Ende', '$Beschreibung', '$Ort', '$Veranstalter',
> '$Zeiten', '$Titel');";
> $result=mysql_query($sql);

Keine Fehlerbehandlung..... unschoen. Auch kein debugging gemacht was
den der Mysqlserver zu deinem Statement gesagt hat?

> mysql_close();
>
> Der INSERT-Befehl sieht dann so aus (mit echo ausgegeben):
> INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
> 'Veranstalter', 'Zeiten', 'Titel') VALUES ('', '20060101', '20060102', 'ja
> ja ja', 'Ort der Veranstaltung', 'Veranstalter', '10.00 Uhr 20 Uhr', 'neue
> veranstaltung');

Frage dich mal in wiefern der Name einer Spalte Probleme verursachen
kann für den Parser und wie man das vermeidet (die beste Loesung hier
ist solche Namen nicht zuverwenden!)

Du findest eine Liste im MySQL Manual unter 'reserved words'.

Gruss
Joerg

Re: INSERT scheint nicht zu funktionieren

am 27.12.2005 17:09:27 von Helmut Schmuckermair

> Der INSERT-Befehl sieht dann so aus (mit echo ausgegeben):
> INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
> 'Veranstalter', 'Zeiten', 'Titel') VALUES ('', '20060101', '20060102', 'ja
> ja ja', 'Ort der Veranstaltung', 'Veranstalter', '10.00 Uhr 20 Uhr', 'neue
> veranstaltung');

Damit bist du schon auf einem guten Weg. Welche Meldung gibt der
SQL-Server aus, wenn du ihm dieses INSERT in der Textoberfläche (mysql
oder mysql.exe) sendest?

Falls 'ID' ein autoincrement hat, solltest du es übrigens nicht angeben.

Re: INSERT scheint nicht zu funktionieren

am 27.12.2005 18:29:46 von Joerg Behrens

Joerg Behrens schrieb:
> Needful Bytes (Jörg Zimmermann) schrieb:
>
>> Hallo zusammen,
>>
>> ich versuche (als mehr kann man es im Moment leider nicht bezeichnen)
>> mit einem INSERT-Befehl aus php heraus einen Datensatz in einer Tabelle
>> zu schreiben. SELECT Statements funktionieren ohne Probleme. Unten ist
>> der Code zu finden. Kann mir jemand sagen, wo der Fehler stecken könnte?
>> Danke schon jetzt.
>>
>> Jörg
>>
>> Codeausschnitt:
>> //Eintrag in die Datenbank
>> $conn = mysql_connect("db410.1und1.de", "dboxxxxxxxxx", "xxxxxxx")
>> or die("Verbindungsfehler: ".mysql_error());
>
>
> Eine Fehlerbehandlung... schoen.
>
>> mysql_select_db("xxxxxxxxxxxxx",$conn);
>> $sql="INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
>> 'Veranstalter', 'Zeiten', 'Titel')
>> VALUES ('', '$Beginn', '$Ende', '$Beschreibung', '$Ort',
>> '$Veranstalter', '$Zeiten', '$Titel');";
>> $result=mysql_query($sql);
>
>
> Keine Fehlerbehandlung..... unschoen. Auch kein debugging gemacht was
> den der Mysqlserver zu deinem Statement gesagt hat?
>
>> mysql_close();
>>
>> Der INSERT-Befehl sieht dann so aus (mit echo ausgegeben):
>> INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
>> 'Veranstalter', 'Zeiten', 'Titel') VALUES ('', '20060101', '20060102',
>> 'ja ja ja', 'Ort der Veranstaltung', 'Veranstalter', '10.00 Uhr 20
>> Uhr', 'neue veranstaltung');
>
>
> Frage dich mal in wiefern der Name einer Spalte Probleme verursachen
> kann für den Parser und wie man das vermeidet (die beste Loesung hier
> ist solche Namen nicht zuverwenden!)
>
> Du findest eine Liste im MySQL Manual unter 'reserved words'.

Kommando zurueck.... und ich haette schwoeren koennen das 'Text' ein
reserved Word ist. Dem ist aber nicht so.

Somit scheidet das aus und es bleibt nur mal zu erfragen was den
mysql_error() ausgibt.

Gruss
Joerg

Re: INSERT scheint nicht zu funktionieren

am 27.12.2005 18:58:24 von Carsten Heinrich

Am Tue, 27 Dec 2005 18:29:46 +0100 schrieb Joerg Behrens:

> Kommando zurueck.... und ich haette schwoeren koennen das 'Text' ein
> reserved Word ist. Dem ist aber nicht so.

Zumindest ist TEXT ein Spaltentyp und somit auf jeden Fall etwas unschön
gewählt. Besser wäre vielleicht 'Freitext' als Name, dann kann man das als
Fehlerquelle von vornherein ausschließen. Ansonsten läßt sich ohne Kenntnis
der Tabellendefinition und der Mysql-Fehlermeldung nur raten. Ein Versuch
mit Glaskugel: passen die Feldtypen zu den Daten aus dem Insert?

Gruß
Carsten

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 00:29:09 von Stephan Seidel

....

> $sql="INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
> 'Veranstalter', 'Zeiten', 'Titel')
> VALUES ('', '$Beginn', '$Ende', '$Beschreibung', '$Ort', '$Veranstalter',
> '$Zeiten', '$Titel');";
^
weglassen


$sql="INSERT INTO 'Termine' ( 'ID','Beginn','Ende','Text', ... )
VALUES ( NULL,'{$Beginn}','{$Ende}','{$Beschreibung}', ... )";
^ ^ ^ ^ ^ ^

Der den jeweiligen Feldern zuzuweisende Wert in Klammern setzen.

Gruß Stephan

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 05:07:23 von jan metzger

>>$sql="INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
>>'Veranstalter', 'Zeiten', 'Titel')
>>VALUES ('', '$Beginn', '$Ende', '$Beschreibung', '$Ort', '$Veranstalter',
>>'$Zeiten', '$Titel');";
> ^
> weglassen
>
> $sql="INSERT INTO 'Termine' ( 'ID','Beginn','Ende','Text', ... )
> VALUES ( NULL,'{$Beginn}','{$Ende}','{$Beschreibung}', ... )";
>
> Der den jeweiligen Feldern zuzuweisende Wert in Klammern setzen.

das ist "unschön" Stephan,
mein Vorschlag:
$sql="INSERT INTO 'Termine' ( 'Beginn','Ende','Text', ... )
VALUES
( '".mysql_escape_string($Beginn)."',
'".mysql_escape_string($Ende)."',
'".mysql_escape_string($Beschreibung)."', ... );";
das Semekolon am ende der MySQL anfrage gehört da hin!

Jan Metzger
P.S. bekommen wir bitte die Fehlermeldung...

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 05:26:07 von Niels Braczek

jan metzger schrieb:

> $sql="INSERT INTO 'Termine' ( 'Beginn','Ende','Text', ... )
> VALUES
> ( '".mysql_escape_string($Beginn)."',
> '".mysql_escape_string($Ende)."',
> '".mysql_escape_string($Beschreibung)."', ... );";
> das Semekolon am ende der MySQL anfrage gehört da hin!

Definitiv *nicht*. SQL kennt keine Mehrfachstatements und daher auch
kein Trennzeichen für Statements.

Außerdem ist mysql_escape_string() deprecated. Stattdessen ist
mysql_real_escape_string() zu verwenden.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 13:06:16 von dev-null-use-reply-adress

Needful Bytes (Jörg Zimmermann) schrieb:
> ich versuche (als mehr kann man es im Moment leider nicht bezeichnen)
> mit einem INSERT-Befehl aus php heraus einen Datensatz in einer Tabelle
> zu schreiben. SELECT Statements funktionieren ohne Probleme. Unten ist
> der Code zu finden. Kann mir jemand sagen, wo der Fehler stecken könnte?

Das kannst Du wahrscheinlich selber. Ich schiebe zu den eigentlich
schon passenden Antworten nochmal die obligatorische FAQ nach.

16.17. Meine Datenbankabfrage funktioniert nicht
http://www.php-faq.de/q/q-sql-fehlerbehandlung.html


Gruß
JPM

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 13:30:09 von Juergen Wille

Am Tue, 27 Dec 2005 14:53:14 +0100 schrieb Needful Bytes (Jörg
Zimmermann):


> Der INSERT-Befehl sieht dann so aus (mit echo ausgegeben):
> INSERT INTO 'Termine' ('ID', 'Beginn', 'Ende', 'Text', 'Ort',
> 'Veranstalter', 'Zeiten', 'Titel') VALUES ('', '20060101', '20060102', 'ja
> ja ja', 'Ort der Veranstaltung', 'Veranstalter', '10.00 Uhr 20 Uhr', 'neue
> veranstaltung');

- Wenn ID ein autoincrement ist, füg es nicht mit ein (INSERT INTO
Termine (Beginn,..) Values ('20060101',..). Falls nicht, und es einen
Wert haben muss, füge keinen Leerstring sondern einen Wert ein.
- Um Tabellen- und Feldnamen sollten keine '' sein.
- Das Semikolon am Ende sollte weg.

Gruß Jürgen

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 13:43:21 von joerg.zimmermann

>> Kommando zurueck.... und ich haette schwoeren koennen das 'Text' ein
>> reserved Word ist. Dem ist aber nicht so.
>
> Zumindest ist TEXT ein Spaltentyp und somit auf jeden Fall etwas unschön
> gewählt. Besser wäre vielleicht 'Freitext' als Name, dann kann man das als
> Fehlerquelle von vornherein ausschließen. Ansonsten läßt sich ohne
> Kenntnis
> der Tabellendefinition und der Mysql-Fehlermeldung nur raten. Ein Versuch
> mit Glaskugel: passen die Feldtypen zu den Daten aus dem Insert?

Ich habe das SQL-Statement aus phpMyAdmin übernommen. Müßte also
eigentlich so funktionieren.

Re: INSERT scheint nicht zu funktionieren

am 28.12.2005 13:53:57 von joerg.zimmermann

Hallo nochmal,

danke für die vielen Antworten.
Es lag an zwei Fehlern:
1. ID ist ein auto increment und mußte daher weggelassen werden
2. Die Hochkommas um Tabellen- und Feldnamen mußten weg.

Einen guten Rutsch ins Neue Jahr wünscht

Jörg

Re: INSERT scheint nicht zu funktionieren

am 17.01.2006 21:50:49 von Roland Aleksa

Hallo,

> Hallo zusammen,
>
> ich versuche (als mehr kann man es im Moment leider nicht bezeichnen)
> mit einem INSERT-Befehl aus php heraus einen Datensatz in einer Tabelle
> zu schreiben.

ich hab' da ein ähnliches Problem:

$result=mysql_query("insert into
dvdvideo(germantitel,origtitel,imdblink,aktuell)
values('deutsch','original','httplink','1');");

funktioniert einwandfrei, aber:

$result=mysql_query("insert into
dvdvideo(germantitel,origtitel,imdblink,aktuell)
values($germantitel,$origtitel,$imdblink,$aktuell);");

fügt keinen Datensatz hinzu.

Die Variablen werden per POST übergeben und echo $germantitel; (und auch
die anderen Variablen) gibt den richtigen Wert zurück.

$result ist in jedem Fall leer.

Kann mir vielleicht jemand 'nen Tritt in die richtige Richtung geben?

Ciao,
Roland

Re: INSERT scheint nicht zu funktionieren

am 17.01.2006 22:09:25 von Niels Braczek

Roland Aleksa schrieb:

> ich hab' da ein ähnliches Problem:
>
> $result=mysql_query("insert into
> dvdvideo(germantitel,origtitel,imdblink,aktuell)
> values('deutsch','original','httplink','1');");
>
> funktioniert einwandfrei, aber:
>
> $result=mysql_query("insert into
> dvdvideo(germantitel,origtitel,imdblink,aktuell)
> values($germantitel,$origtitel,$imdblink,$aktuell);");
>
> fügt keinen Datensatz hinzu.

Wenn du dir die Fehlermeldung angesehen hättest, wüsstest du, wo der
Fehler liegt.

$sql = "INSERT INTO dvdvideo (
germantitel,
origtitel,
imdblink,
aktuell
) VALUES (
'$germantitel',
'$origtitel',
'$imdblink',
$aktuell
)";
$result = mysql_query($sql) or die ($sql.'
'.mysql_error());

Die Zeichenketten müssen für MySQL also in Hochkommata gesetzt werden.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
------------------------------------------------------------ ----

Re: INSERT scheint nicht zu funktionieren

am 17.01.2006 22:53:52 von Roland Aleksa

Niels Braczek schrieb:
> Die Zeichenketten müssen für MySQL also in Hochkommata gesetzt werden.

Danke, ich dachte mir schon, dass ich den Wald vor lauter Bäumen nicht
sehe. :-)

Man liest sich,
Roland