INSERT scheint nicht zu funktionieren

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');
joerg.zimmermann [ Di, 27 Dezember 2005 14:53 ] [ ID #1117649 ]

Re: INSERT scheint nicht zu funktionieren

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
Joerg Behrens [ Di, 27 Dezember 2005 15:06 ] [ ID #1117650 ]

Re: INSERT scheint nicht zu funktionieren

> 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.
Helmut Schmuckermair [ Di, 27 Dezember 2005 17:09 ] [ ID #1117653 ]

Re: INSERT scheint nicht zu funktionieren

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
Joerg Behrens [ Di, 27 Dezember 2005 18:29 ] [ ID #1117654 ]

Re: INSERT scheint nicht zu funktionieren

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
Carsten Heinrich [ Di, 27 Dezember 2005 18:58 ] [ ID #1117655 ]

Re: INSERT scheint nicht zu funktionieren

....

> $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
Stephan Seidel [ Mi, 28 Dezember 2005 00:29 ] [ ID #1117656 ]

Re: INSERT scheint nicht zu funktionieren

>>$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...
jan metzger [ Mi, 28 Dezember 2005 05:07 ] [ ID #1119031 ]

Re: INSERT scheint nicht zu funktionieren

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 |
`----------------------------------------------------------- -----´
Niels Braczek [ Mi, 28 Dezember 2005 05:26 ] [ ID #1119032 ]

Re: INSERT scheint nicht zu funktionieren

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
dev-null-use-reply-ad [ Mi, 28 Dezember 2005 13:06 ] [ ID #1119035 ]

Re: INSERT scheint nicht zu funktionieren

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
Juergen Wille [ Mi, 28 Dezember 2005 13:30 ] [ ID #1119036 ]

Re: INSERT scheint nicht zu funktionieren

>> 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.
joerg.zimmermann [ Mi, 28 Dezember 2005 13:43 ] [ ID #1119037 ]

Re: INSERT scheint nicht zu funktionieren

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
joerg.zimmermann [ Mi, 28 Dezember 2005 13:53 ] [ ID #1119038 ]

Re: INSERT scheint nicht zu funktionieren

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
Roland Aleksa [ Di, 17 Januar 2006 21:50 ] [ ID #1145679 ]

Re: INSERT scheint nicht zu funktionieren

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.'<br>'.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 |
------------------------------------------------------------ ----
Niels Braczek [ Di, 17 Januar 2006 22:09 ] [ ID #1145681 ]

Re: INSERT scheint nicht zu funktionieren

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
Roland Aleksa [ Di, 17 Januar 2006 22:53 ] [ ID #1145683 ]
PHP » de.comp.lang.php.datenbanken » INSERT scheint nicht zu funktionieren

Vorheriges Thema: PHP zu HTML/Excel rückcompilern?
Nächstes Thema: [FAQ/2006-01-15] Loesungen fuer deine PHP-Probleme