PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim import von daten - Duplicate entry wo keiner sein dürfte


dojoh
20.03.2004, 20:46:16
Hi Leute,

ich habe ein mittelprächtiges problem bei einem php script das daten aus einer datei importieren soll

hierzu erstelle ich unteranderem eine temporäre 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 füge ich mithilfe einer for schleife teile aus einer anderen temporären 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 erklären, da alle spalten als primary key definiert sind und durch das insert IGNORE keien doppelten einträge entstehen können.

ich habeschon im iternet nach lösungen 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 gelöscht (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 könnt mir helfen!
danke schonmal im vorraus!

cya Ole

Marilu
20.03.2004, 21:30:59
Brauchst Du bei einer temporären Datei Index-Dateien? Lass sie doch einfach weg.

meikel
20.03.2004, 21:56:47
Original geschrieben von dojoh
$sql_query = "INSERT IGNORE INTO temp2(Klasse,LehrerKuerzel,Raum,ZeitID) VALUES
("".$kbez."","".$lehrer."","".$raum."",".$zeit.")";

Egal, was Du sonst noch für 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, 00:35:17
@marilu ich bin mir nicht sicher was du mit index-datein meinst, da ich keine temporären datein erstelle, denke aber du meinst die primary keys. das problem ist das in der original version sozusagend datensätze der form

name1 ort1 zeit1
name1 ort1 zeit2

existieren, wobei ich nur name und ort benötige. 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 läuft)

dojoh
21.03.2004, 09:29:39
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 für die Vorletze.

Wäre echt super wenn mir hier jemand helfen könnte. Bin echt mit meinem sql-php-latein am Ende ;)

meikel
21.03.2004, 13:26:24
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, 13:43:26
hmmm ich muss ehrlich sagen: ich finds sch*** das kein reiner SQL Fehler vorliegt. Wäre sicher einfacher zu lösen.

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 für die Hilfe!

dojoh
21.03.2004, 16:02:01
so es klappt jetzt alles wieder :D


danke für eure hilfe