PDA

Vollstndige Version anzeigen : problem beim import von daten - Duplicate entry wo keiner sein drfte


dojoh
20-03-2004, 21:46
Hi Leute,

ich habe ein mittelprchtiges problem bei einem php script das daten aus einer datei importieren soll

hierzu erstelle ich unteranderem eine temporre tabelle:

@mysql_query("CREATE TABLE temp2 (
`Klasse` VARCHAR( 32 ) NOT NULL ,
`LehrerKuerzel` CHAR( 3 ) NOT NULL ,
`Raum` VARCHAR( 16 ) NOT NULL ,
`ZeitID` INT( 16 ) NOT NULL ,
PRIMARY KEY(`Klasse`,`LehrerKuerzel`,`Raum`,`ZeitID`)
)") or die("MySQL-Fehler: " . mysql_error());


funktioniert wunderbar.

danach fge ich mithilfe einer for schleife teile aus einer anderen temporren tabelle in diese ein:

$sql_query = "INSERT IGNORE INTO temp2(Klasse,LehrerKuerzel,Raum,ZeitID) VALUES("".$kbez."","".$lehrer."","".$raum."",".$zeit.")";
@mysql_query($sql_query) or die("Query: $sql_query <br>MySQL-Fehler: " . mysql_error());


und ich erhalte die fehlermeldung:

Query: INSERT IGNORE INTO temp2(Klasse,LehrerKuerzel,Raum,ZeitID) VALUES("AG","HEN","13",409)
MySQL-Fehler: Duplicate entry '0-0--' for key 1

und ich kann mir diese fehlermeldung nciht erklren, da alle spalten als primary key definiert sind und durch das insert IGNORE keien doppelten eintrge entstehen knnen.

ich habeschon im iternet nach lsungen gesucht, aber nichts gescheites gefunden. habe die datenbank auch schon neu erstellt und die tabelle wird ohnehin bei jedem script aufruf neu erstellt und danach gelscht (bzw aktuell danach manuell wegen der fehlermeldung)
es liegt auc hnicht an nem tinyint und nem zuhoch werdenen autoincrement... sprich alles was ich gefunden habe bzw erahnt habe hilft mir nicht weiter.

ich hoffe ihr knnt mir helfen!
danke schonmal im vorraus!

cya Ole

Marilu
20-03-2004, 22:30
Brauchst Du bei einer temporren Datei Index-Dateien? Lass sie doch einfach weg.

meikel
20-03-2004, 22:56
Original geschrieben von dojoh
$sql_query = "INSERT IGNORE INTO temp2(Klasse,LehrerKuerzel,Raum,ZeitID) VALUES
("".$kbez."","".$lehrer."","".$raum."",".$zeit.")";

Egal, was Du sonst noch fr Fehler verbrichst, aber MySQL erkennt Strings nur dann als Strings, wenn Du sie zwischen Hochkommas packst.

EDIT/Korrektur:
http://www.mysql.de/doc/de/String_syntax.html

MySQL erkennt beide Notationen:
'eine Zeichenkette'
"eine weitere Zeichenkette"

dojoh
21-03-2004, 01:35
@marilu ich bin mir nicht sicher was du mit index-datein meinst, da ich keine temporren datein erstelle, denke aber du meinst die primary keys. das problem ist das in der original version sozusagend datenstze der form

name1 ort1 zeit1
name1 ort1 zeit2

existieren, wobei ich nur name und ort bentige. wenn ich das ohne primary keys mache funktioniert das mit dem ignore nicht und ich bekomme einen fehler das die zeile doppelt vorhanden ist. (bin mir nicht sicher ob ich das jetzt mit deinen index-datein richtig verstanden habe)

@meikel du meinst das ich die bergebenen variablen $kbez etc nicht zwischen " sondern zwischen ' bergeben soll? gut wen ndas einen unterscheid macht werde ich es ndern (obwohl es bei allen anderen sql querrys auch luft)

dojoh
21-03-2004, 10:29
Falls es hilft: Ich habe gerade herrausgefunden, dass der Fehler immer bei der letzen zu importierenden Zeile auftritt. Selbst wenn ich nur alle Zeilen bis auf die Letze versuche zu importieren, erhalte ich den Fehler fr die Vorletze.

Wre echt super wenn mir hier jemand helfen knnte. Bin echt mit meinem sql-php-latein am Ende ;)

meikel
21-03-2004, 14:26
Original geschrieben von dojoh
@meikel du meinst das ich die bergebenen variablen $kbez etc nicht zwischen " sondern zwischen ' bergeben soll?
Ich habe meinen Text oben inzwischen korrigiert, da MySQL sowohl
'eine Zeichenkette' als auch "eine weitere Zeichenkette" als Zeichenkette interpretiert. In Deinem Beispiel macht es nur weniger Arbeit und sieht bersichtlicher aus, wenn Du innerhalb von " " Strings mit ' ' einrahmst.

EDIT:
Ich habe eben mal das CREATE TABLE und das INSERT im PhpMyAdmin getestet. Fehlerfrei. Ein reiner SQL Fehler liegt also nicht vor.

dojoh
21-03-2004, 14:43
hmmm ich muss ehrlich sagen: ich finds sch*** das kein reiner SQL Fehler vorliegt. Wre sicher einfacher zu lsen.

Nunja ich hab gerade beschlossen das ganze nocheinmal von Grund auf zu programmieren, vieleicht liegt der Fehler irgendwo so versteckt das ich ihn bersehe.

Besten Dank dennoch schonmal fr die Hilfe!

dojoh
21-03-2004, 17:02
so es klappt jetzt alles wieder :D


danke fr eure hilfe