Mysql insert!
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anlegen
auslassen
code
dank
datum
eintrag
fehler
fehlermeldung
feld
host
parameter
problem
re
setzen
spalte
sprache
string
test
zahl
-
Abend,
könnte mir, irgendjemand helfen?
Ich rätsle schon die ganze Zeit, warum das nicht geht.
test.php
<?php mysql_connect("","name","passwort"); mysql_select_db("arcanum"); $sql = mysql_query("insert news (id, titel, news, autor, datum, sprache) values ('7', 'titel', 'news', 'autor', '2010-09-10', 'de')"); $num = mysql_affected_rows($sql); ?>
ref="/tag/fehler">Fehlermeldung:
Warning: mysql_affected_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\arcanum\test.php on line 5
Das seltsame ist, dass der Datenbankeintrag trotzdem gemacht wird.
Schonmal danke,
Skar1212 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^
-
function db_connect() { $db['host'] = 'localhost'; $db['uid'] = 'username'; $db['pwd'] = 'password'; $db['db'] = 'database'; $db = new mysqli($db['host'], $db['uid'], $db['pwd'], $db['db']) or die('Verbindungsfehler!'); if(mysqli_connect_errno()){ echo "Fehler: Verbindung konnte nicht hergestellt werden."; } return $db; } $db = db_connect(); $sql = "insert news (id, titel, news, autor, datum, sprache) values ('7', 'titel', 'news', 'autor', '2010-09-10', 'de')"; $result = $db->query($sql); $num = $db->affected_rows;
Versuch es mal so, ich mag mysqli lieber und die $db->affected_rows-Abfrage ist finde ich einfacher.
EDIT:
mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^
Die Verbindung klappt ja, selbst der Eintrag in die DB haut hin.
Beitrag zuletzt geändert: 10.9.2010 23:11:24 von vertico -
nwage schrieb:
mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^
Ok, dann kommt, aber:
Duplicate entry '7' for key 'id'
Das ist auch klar, weil die Spalte id unique ist.
Und die genaue Fehler beschreibung steht nur darunter wenn der eintrag 2x vorhanden ist.
Sonst steht die normale Meldung dort.
vertico schrieb:
Versuch es mal so, ich mag mysqli lieber und die $db->affected_rows-Abfrage ist finde ich einfacher.
Danke für den Code, aber ich würde trotzdem gerne wissen, warum es nicht funktioniert.
Normalerweiße klappt das immer
Beitrag zuletzt geändert: 10.9.2010 23:14:49 von skar1212 -
Ich bin zwar müde, aber das sollte noch gehen:
1. id würde ich auf auto_increment setzen und beim Insert dann auslassen
2. Um den Ursprungsfehler reproduzieren zu können, musst du auf jeden Fall eine neue Spalte anlegen, von mir aus mit id 8 - Denn dass der Fehler jetzt angezeigt wird, ist logisch.
Ursprungsfehler wird jedoch ein Syntaxfehler im Insert sein:
$sql = mysql_query("INSERT INTO news (id, titel, news, autor, datum, sprache) VALUES (7, 'titel', 'news', 'autor', '2010-09-10', 'de')");
1. es heißt INSERT INTO
2. Die id wird ohne Hochkomma eingefügt
Beitrag zuletzt geändert: 11.9.2010 8:25:49 von fabo -
xD auf das INTO hab ich letzte Nacht auch nicht geachtet und sogar noch seinen Query fehlerhaft kopiert. Ich hätte ne Idee Lima: Postsperre von Code nach 22 Uhr als Müdigkeitsschutz ^^
-
fabo schrieb:
Ich bin zwar müde, aber das sollte noch gehen:
1. id würde ich auf auto_increment setzen und beim Insert dann auslassen
2. Um den Ursprungsfehler reproduzieren zu können, musst du auf jeden Fall eine neue Spalte anlegen, von mir aus mit id 8 - Denn dass der Fehler jetzt angezeigt wird, ist logisch.
Ursprungsfehler wird jedoch ein Syntaxfehler im Insert sein:
$sql = mysql_query("INSERT INTO news (id, titel, news, autor, datum, sprache) VALUES (7, 'titel', 'news', 'autor', '2010-09-10', 'de')");
1. es heißt INSERT INTO
2. Die id wird ohne Hochkomma eingefügt
Erstmal danke für den auto_increment typ, so eine Funktion hab ich schon lange gesucht.
aber ich bin trotzdem immer noch am verzweifeln.
es geht nicht -
Wenn die id auto_increment ist, lass die id weg. MySQL erhöht den Wert bei jedem INSERT automatisch um 1.
Duplicate entry '7' for key 'id'
Der Fehler sagt, dass eine ID 7 schon vorhanden ist, also kannst du sie nicht nochmal anlegen. -
chatter schrieb:
Wenn die id auto_increment ist, lass die id weg. MySQL erhöht den Wert bei jedem INSERT automatisch um 1.
Duplicate entry '7' for key 'id'
Der Fehler sagt, dass eine ID 7 schon vorhanden ist, also kannst du sie nicht nochmal anlegen.
Ja, aber das ist ja nicht das Problem. Das war nur weil ich id immer mit 7 geschrieben habe.
Aber auch wenn ich immer andere Zahlen verwende kommt die Fehlermeldung:
Warning: mysql_affected_rows() expects parameter 1 to be resource, string given in C:\xampp\htdocs\arcanum\test.php on line 6
Was ja, ziemlich seltsam ist, da der eitnrag ja in der Datenbank gespeichert wird.
Die Fehlermeldung kommt trotzdem -
So, jetzt wird die Wahrheit ausgepackt. Es nervt mich tierisch, dass PHP ausgerechnet an dieser Stelle falsch dokumentiert ist. Die Funktion mysql_query() liefert nicht immer eine Ressource zurück, sondern im Fehlerfall auch eine Boolesche Variable mit dem Wert false. Da es einen Fehler gibt und du nicht prüfst, ob dir mysql_query() false zurück gibt, oder ob alles glatt lief, wird false als Parameter an mysql_affected_rows() übergeben. Dies wirft den Fehler, der in der Fehlermeldung auch sehr ordentlich definiert ist, weswegen ich mich wundere, wie es hier so viele falschen Antworten geben konnte. Alle Antworten, bis auf die von Fabo und der meinigen gehören gelöscht.
@TE: Bitte tue, was Fabo dir gesagt hat: Schreibe "INSERT INTO", dann müsste der Fehler verschwinden. Und aus
machst du bitte$num = mysql_affected_rows($sql);
if($sql) $num = mysql_affected_rows($sql); else die('Fehler im Query!');
Beitrag zuletzt geändert: 11.9.2010 22:47:24 von drafed-map -
drafed-map schrieb:
@TE: Bitte tue, was Fabo dir gesagt hat: Schreibe "INSERT INTO", dann müsste der Fehler verschwinden. Und aus
machst du bitte$num = mysql_affected_rows($sql);
if($sql) $num = mysql_affected_rows($sql); else die('Fehler im Query!');
mhm, also mittlererweile glaube ich das ich zu blöd dafür bin.
ich schaffs nicht, hier ist der ganze code:
<?php mysql_connect("","user","passwort"); mysql_select_db("arcanum"); $sql = mysql_query("insert into news (id, titel, news, autor, datum, sprache) values ('', 'titel', 'news', 'autor', '2010-09-05', 'de')"); if($sql) $num = mysql_affected_rows($res); else die('Fehler im Query!'); ?>
Es kommt immernoch die gleiche fehler meldung.
Das erste Feld bei Value ist freigelassen weil auto_increment benutzt wird -
Z.Z. lässt du das Feld nicht frei. Du sagst: "Da kommt der String '' hin!". Da eine Zahl erwartet wird, wird aus dem String '' die Zahl 0 gemacht. Du kannst 0 aber nicht als ID setzen. Die Lösung: Wen interessiert die ID? Das lassen wir doch schön MySQL machen, wir wollen damit nichts zu tun haben. Wir haben gesagt, dass MySQL dieses Feld selbstständig mit immer größeren Ganzzahlen ausfüllen soll, und das tut es. Dabei dürfen wir ihm nicht in die Quere kommen. Hier der korrekt Code:
<?php mysql_connect("","user","passwort"); mysql_select_db("arcanum"); $sql = mysql_query("insert into news (titel, news, autor, datum, sprache) values ('titel', 'news', 'autor', '2010-09-05', 'de')"); if($sql) $num = mysql_affected_rows($res); else die('Fehler im Query!'); ?>
-
Ok, das mit dem auto_increment hab ich jetzt verstanden, aber die fehlermeldung bleibt
-
Das kann eigentlich garnicht sein. Sag uns mal, was var_dump($sql); ausgibt, nachdem das Query abgeschickt wurde.
-
Ähm das ist jetzt wirklich seltsam.
Es kommt : bool(true)
das kann doch gar nicht sein oder? -
sag mal, welchen Datentyp hat dein Datum eigentlich?
wenn ich mich recht entsinne, schreibt man in SQL Datum durch # eingeschlossen... beispiel: #12.09.2010# oder #2010-09-12#
oder mach in der Datenbank nen String aus dem Datum, dann bekommst du am 19. Januar 2038 auch kein problem mit dem Datum^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage