Insert into fehler
Alkatar
- php
Guten Abend,
ich arbeite immoment an einem Script, wo Leute Daten eingeben können und diese dann in die Datenbank kommen. also hab ich mich drangesetzt und dashier gemacht:
mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
mysql_select_db($DB_NAME);
$sql = "insert into 'mil' values ('',$grade,'$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
$result=mysql_query($sql);
Das verbinden klappt einwandfrei. Jetzt das Problem:
$result ist leer
In der Datenbank ist nichts eingetragen worden
und wenn ich den Befehl
insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')
in meinem phpmyadmin ausführe kommt die folgende Fehlermeldung:
#1064 - 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 ''mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')' at line 1
ich hoffe mir kann da jemand helfen
mfg
Alkatar
PS:
Hier noch die Tabellenstruktur:
Field Type Key Default Extra
id int(11) PRI NULL auto_increment
grade2 int(11) 0
frage2 text
ant1 varchar(120)
ant2 varchar(120)
ant3 varchar(120)
ant4 varchar(120)
antrichtig varchar(10)
Hallo,
insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')
Lass mal die Hochkommata um mil weg …
Gruß
Olaf
Hallo,
insert into 'mil' values ('',50,'kil','fghj1','cbvnant2','ant3','ant4','drichtig')
Lass mal die Hochkommata um mil weg …
Gruß
Olaf
Funktioniert auch nich -.- und @ Rob:
danke für den tipp mit dem Code
mit den Spaltenangaben im insert gehts auch net
Hi!
mit den Spaltenangaben im insert gehts auch net
Nein. Das war auch nicht zu erwarten.
Der Fehler liegt darin, daß du deinen Tabellennamen in Quotes gefasst hast.
Die Syntax lautet:
INSERT INTO tabelle (spalten) VALUES (werte)
und nicht:
INSERT INTO 'tabelle' (spalten) VALUES (werte)
(Wobei du das (spalten) auch weglassen könntest.)
Schöner Gruß,
rob
Hi!
mit den Spaltenangaben im insert gehts auch net
Nein. Das war auch nicht zu erwarten.
Der Fehler liegt darin, daß du deinen Tabellennamen in Quotes gefasst hast.Die Syntax lautet:
INSERT INTO tabelle (spalten) VALUES (werte)
und nicht:
INSERT INTO 'tabelle' (spalten) VALUES (werte)(Wobei du das (spalten) auch weglassen könntest.)
Schöner Gruß,
rob
Wie gesagt, das funktioniert genausowenig-.-
Hi!
Wie gesagt, das funktioniert genausowenig-.-
Und du bekommst noch immer genau die gleiche Fehlermeldung?
Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.
Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.
Schöner Gruß,
rob
Hi!
Wie gesagt, das funktioniert genausowenig-.-
Und du bekommst noch immer genau die gleiche Fehlermeldung?
Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.
Schöner Gruß,
rob
Jetzt versteh ich endgültig nixmehr...
im phpmyadmin funktioniert das so aber in meinem php prog net obwohl das (fast) identisch ist(bis auf die Variablen)
Hi!
Wie gesagt, das funktioniert genausowenig-.-
Und du bekommst noch immer genau die gleiche Fehlermeldung?
Da du in deinem Script ja alle Rückgabewerte ignorierst und keinerlei Fehlermeldungen ausgibst, solltest du das noch mal in PHPMyAdmin versuchen und schauen, ob sich die Fehlermeldung eventuell geändert hat.Das mit den Quotes um deinen Tabellennamen ist in jedem Fall schon einmal falsch gewesen und hätte zu der von dir geposteten Fehlermeldung führen müssen.
Schöner Gruß,
robJetzt versteh ich endgültig nixmehr...
im phpmyadmin funktioniert das so aber in meinem php prog net obwohl das (fast) identisch ist(bis auf die Variablen)
Aha jetzt funktionierts plötzlich kp warum aber es funzt Danke euch für eure Hilfeeeee
mfg
Alkatar
Ich hab das nächste problem, eigendlich schon wieder das gleiche, nur ich hab jetzt eine Tablle die heißt 50, eine die heißt 100, eine heißt 200 usw.
So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:
$sql="insert into $grade values ('','$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
$result=mysql_query($sql);
$result ist mal wieder leer
Die Tabelle:
Feld Typ Kollation Extra
id int(11) auto_increment
frage text latin1_german2_ci
ant1 varchar(120) latin1_german2_ci
ant2 varchar(120) latin1_german2_ci
ant3 varchar(120) latin1_german2_ci
ant4 varchar(120) latin1_german2_ci antrichtig varchar(10) latin1_german2_ci
So sehen alle der Tabellen aus
mfg
Alkatar
PS: phpmyadmin meldet bei
insert into 50 values ('','gf','df','fd','ert','fg','kjl'):
#1064 - 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 '50 values ('','gf','df','fd','ert','fg','kjl')' at line 1
Ich hab das nächste problem, eigendlich schon wieder das gleiche, nur ich hab jetzt eine Tablle die heißt 50, eine die heißt 100, eine heißt 200 usw.
So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:
Du hast Tabellen mit Zahlen als Namen?
Das würde ich lassen... :-)
Nick
Hi!
Ich hab das nächste problem,
Ja, da gibt es einiges an Problemen.
Wie ich bereits sagte, darfst du niemals Variablen ungeprüft übernehmen und in deine Abfragen einbauen.
So nun habe ich hierdas wobei $grade aus einem optionfeld geholt wird, in dem halt 50, 100 oda 200 usw. steht:
$sql="insert into $grade values ('','$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
Was ist denn jetzt, wenn jemand per URL (oder vielleicht auch per POST-Request) einen anderen Wert übergibt?
Dann werden dort Einträge in eine andere Tabelle gemacht.
Und da du keine Spaltennamen mit angibst, so wie ich das empfohlen habe, würde es wohl keine Fehlermeldung geben, sondern der Eintrag würde dann wohl gemacht werden...
Du mußt alle Daten, die von außen kommen, grundsätzlich als böse ansehen.
Niemals darfst du damit so - ungeprüft und unbereinigt - weiterarbeiten.
Ich habe dir da bereits einen Link gepostet...
Schau dir auch mal das an: http://de.wikipedia.org/wiki/SQL-Injektion
Mit einem Script wie deinem, ist es nicht besonders schwer, die Kontrolle über deine Datenbank zu übernehmen und mal eben ein paar Tabellen zu killen.
Das ist wirklich fahrlässige Programmierung.
$result=mysql_query($sql);
$result ist mal wieder leer
Und es gibt keine Fehlermeldung?
Wieso fängst du die Fehler nicht ab?
Zumindest zu Testzwecken solltest du das tun:
$result=mysql_query($sql) or die( "Fehler: " . mysql_error() );
PS: phpmyadmin meldet bei
insert into 50 values ('','gf','df','fd','ert','fg','kjl'):#1064 - 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 '50 values ('','gf','df','fd','ert','fg','kjl')' at line 1
Deine Tabelle heißt wirklich "50"?
Das ist aber gar nicht gut...
Prinzipiell ist das zwar erlaubt, aber ich würde dir doch stark davon abraten, einfach nur eine Zahl als Tabellennamen zu verwenden.
Hier liegt auch dein Problem.
Setze den Tabellennamen in Backticks, dann müßte es funktionieren:
INSERT INTO
50 VALUES ('','gf','df','fd','ert','fg','kjl');
Aber halt Backticks und keine Single-Quotes. Dann bekommst du wieder die Fehlermeldung, die du vorher hattest...
Außerdem beendest du dein Statements mit einem Doppelpunkt anstelle eines Semikolons.
Schöner Gruß,
rob
Hi!
mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
mysql_select_db($DB_NAME);
Interessieren dich die Rückgabewerte dieser Funktionen nicht?
$sql = "insert into 'mil' values ('',$grade,'$frage','$ant1','$ant2','$ant3','$ant4','$richtig')";
Entferne die Quotes um den Tabellennamen. Dann wird deine Abfrage sicherlich funktionieren.
Aber: Warum gibst du die Spalten eigentlich nicht mit an? Das mußt du nicht unbedingt tun, wäre aber besser, um eventuelle Fehler zu vermeiden.
$result=mysql_query($sql);
Wieso fängst du eventuell auftretende Fehler nicht ab?
Außerdem befürchte ich, daß du deine Variablen einfach ungeprüft in deine Abfrage einbaust (oder du hast den entsprechenden Codeteil verschwiegen).
Das darfst du niemals tun!
Ansonsten darfst du dich nicht wundern, wenn mal jemand deine Tabellen killt oder sonstwas macht.
Aus den FAQ der Newsgroups de.comp.lang.php.*:
Wie kann ich bösartigen Code in SQL-Abfragen unterbinden?
Schöner Gruß,
rob