mySQL insert
Peetchen Puk
- php
0 razigal0 Tobias Kloth0 Tom
0 Peetchen Puk
0 Tobias Kloth
Guten Tag,
eine Frage zu einem Problem das mich nun seit mehreren Stunden quält.
Also ein Skript soll in die Datenbank einen Datensatz eintragen.
Die Attribute der Tabelle sind sid, anzahl, artikelnummer, date.
Jetzt benutzt mein Script folgendes SQL Statement:
INSERT INTO warenkorb (sid, anzahl, artikelnummer) VALUES ('13862a5aad8c065570651c8df0937215,1,10265')
Und ich bekomme folgende Fehlermeldung.
Column count doesn't match value count at row 1
1136
Ich nehme an es hat mit der Spalte "Date" zu tun? ALso die Zahle der Daten die ich eintragen möchte ist nicht gleich der Zahl der Spalten.
Aber wie soll das gehen? Das "date" wird doch von der DB erzeugt.
Könnt mir jemand die Lösung geben?
Danke
Hallo Super DAU! versuchs mal damit:
INSERT INTO warenkorb (sid
, anzahl
, artikelnummer
) VALUES ('13862a5aad8c065570651c8df0937215','1','10265')
du solltest bei den values jeden wert mit einem ' beginnen und mit einem ' beenden.
Hallo,
Hallo Super DAU!
ich glaube eher nicht, das der OP ein DAU ist - schon gleich keine Super DAU.
INSERT INTO warenkorb (
sid
,anzahl
,artikelnummer
)
die Backticks sind überflüssig, die macht nur phpmyadmin dahin.
VALUES ('13862a5aad8c065570651c8df0937215','1','10265')
du solltest bei den values jeden wert mit einem ' beginnen und mit einem ' beenden.
nein, Zahlen brauchen keine Anführungszeichen außenrum.
Grüße aus Nürnberg
Tobias
Hello,
du solltest bei den values jeden wert mit einem ' beginnen und mit einem ' beenden.
nein, Zahlen brauchen keine Anführungszeichen außenrum.
Dürfen aber haben. Was das ganze wieder polymorph macht.
Liebe Grüße aus dem Herzen Niedersachsens
Tom (der mit dem Bauch tanzt)
Hi,
du solltest bei den values jeden wert mit einem ' beginnen und mit einem ' beenden.
Ja also das Problem ergibt sich wenn folgende Anweisung meine DB Klassenfunktion aufruft:
...
else // item not yet in db
{
$db->insert("warenkorb", "'sid', 'anzahl', 'artikelnummer'", "'$sid', '$anzahl[$i]', '$artikelnummer[$i]'");
}
Hier die DB Klasse
function insert($table, $fields = "", $values = "")
{
$sql_stat = "INSERT INTO $table ";
if (is_array($fields))
{
$theFields = implode(",", $fields);
}
else
{
$theFields = $fields;
}
if (is_array($values))
{
$theValues = implode("','", $values);
}
else
{
$theValues = $values;
}
$theValues = str_replace("'now()'", "now()", $theValues);
if (!empty($theFields))
{
$sql_stat .= "($theFields) ";
}
$sql_stat .= "VALUES ('".$theValues."')";
mysql_query($sql_stat) or $this->error($sql_stat, mysql_error(), mysql_errno());
}
Ich bekomme trotzdem die gleich Fehlermeldung.
Hatte es auch mit den '' versucht. Trotzdem haut es nicht hin.
Danke
Hallo,
$db->insert("warenkorb", "'sid', 'anzahl', 'artikelnummer'", "'$sid', '$anzahl[$i]', '$artikelnummer[$i]'");
$theValues = implode("','", $values);
$theValues = str_replace("'now()'", "now()", $theValues);
generell um jeden Wert Anführungszeichen zu setzen halte ich für nicht besonders gut - es gibt noch mehr Funktionen als now().
$sql_stat .= "VALUES ('".$theValues."')";
damit bekommst du sowas:
''SID','23','43344''
als Query...
Ich bekomme trotzdem die gleich Fehlermeldung.
wie sieht der Query jetzt aus?
Hatte es auch mit den '' versucht. Trotzdem haut es nicht hin.
imho ist es keine gute Idee den Query mit einer Funktion zusammenzubauen - dafür gibt es zu viele Variationsmöglichkeiten. Ich würde einfach den fertigen Query der Funktion übergeben und ihn ausführen lassen, dann kann auch nichts passieren.
Grüße aus Nürnberg
Tobias
Hi,
ja werde Deinen Rat überdenken. Aber im Moment habe ich wichtigere Dinge zu tun.
Würde den Insert gerne wenigstens vorläufig mir der vorhandenen Funktion zum laufen bekommen.
wie sieht der Query jetzt aus?
Stand der Dinge ist momentan:
else // item not yet in db
{
$db->insert("warenkorb", "sid, anzahl, artikelnummer", "'$sid', $anzahl[$i], $artikelnummer[$i]");
}
Produziert wird folgende Fehlermeldung:
0INSERT INTO warenkorb (sid, anzahl, artikelnummer) VALUES (''13862a5aad8c065570651c8df0937215', 11, 10265')
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '13862a5aad8c065570651c8df0937215', 11, 10265')' at line 1
1064
Habe gerade noch mal auf der mysql Seite nachguguckt.
Was in der ertsen Klammer steht gehört nicht in backticks.
Aber was mache ich falsch?
Danke
Hallo,
0INSERT INTO warenkorb (sid, anzahl, artikelnummer) VALUES (''13862a5aad8c065570651c8df0937215', 11, 10265')
in dieser Zeile:
$sql_stat .= "VALUES ('".$theValues."')";
musst du die einfachen Anführungszeichen (>>'<<) wegmachen, dann sollte es funktionieren.
Grüße aus Nürnberg
Tobias
Hi,
0INSERT INTO warenkorb (sid, anzahl, artikelnummer) VALUES (''13862a5aad8c065570651c8df0937215', 11, 10265')
in dieser Zeile:
$sql_stat .= "VALUES ('".$theValues."')";
musst du die einfachen Anführungszeichen (>>'<<) wegmachen, dann sollte es funktionieren.
Jo, das funktioniert.
Allerdings wird die Funktion von anderen Stellen ebenfalls aufgerufen.
Könntest Du mir vielleicht verraten, wie ich den Aufruf ändern kann, so dass es funzt?
Vielen Dank.
Gruß
Peetchen
Hallo Peetchen,
Allerdings wird die Funktion von anderen Stellen ebenfalls aufgerufen.
Könntest Du mir vielleicht verraten, wie ich den Aufruf ändern kann, so dass es funzt?
wie rufst du die Funktion an den anderen Stellen auf? mit
$db->insert("[...]", "[...]","$sid,$anzahl[$i],$artikelnummer[$i]");
?
dann musst du $values an den Kommata trennen und das ganze wie die ein Array weiterbehandeln (also mit
$theValues = implode("','", $values);
wieder "zusammenkleben" (Anführungszeichen ganz am Anfang und am Ende nicht vergessen).
Grüße aus Nürnberg
Tobias
Hallo,
eine Frage zu einem Problem das mich nun seit mehreren Stunden quält.
ich tippe mal auf Betriebsblindheit :-)
INSERT INTO warenkorb (sid, anzahl, artikelnummer) VALUES ('13862a5aad8c065570651c8df0937215,1,10265')
Column count doesn't match value count at row 1
du hast in der ersten Klammer mit den Spaltennamen 3 Spalten angegeben, in der zweiten Klammer steht aber nur ein Wert drin (da du ganz außenrum Anführungszeichen gemacht hast). Du solltest das Anführungszeichen vor der schließenden Klammer wegmachen und vor das erste Komma eins setzen (um 1 und um 10265 brauchst du keine machen, da das Zahlen sind und keine Strings).
Grüße aus Nürnberg
Tobias