MYSQL DB mit verschachtelter for Schleife befüllen

Da es nicht direkt um IPS geht, bitte Beitrag löschen wenn nicht gewünscht.

Um mich mit PHP und mysql weiterzubilden programiere ich ein bisschen für mich.
Bei meinem aktuellen Projekt komme ich leider nicht weiter. Vielleicht kann mir da jemand auf die Sprünge helfen.
Das Skript liest eine .txt Datei aus und soll mir alle Daten in die DB packen. Das funktioniert auch beim ersten befüllen.
Aber beim 2 Durchlauf klappt es nicht mehr. Ich denke das hier der Fehler liegt.

	if(mysql_num_rows($einlesen)==1) return;                          // Wenn ja nix, Wenn nein anlegen
			else 	   $sql = "
				  INSERT INTO `burg`
				  (
				  `name`
				  )
				  VALUES
				  (
				  '$name'
				  );
				  ";
		$db_erg = mysql_query($sql)
		   or die("Anfrage fehlgeschlagen: " . mysql_error());

Wenn ich das return entferne meckert er wegen

 $db_erg = mysql_query($sql)

Ich verstehe nur nicht warum. Hier das ganze Skript

<?

# Variablen ####################################################################

	$text = file_get_contents("E:/IP-Symcon/LaK.txt");
	$burg = explode("|", $text);    // nach | trennen

# MySql Aufbau #################################################################

    $mysqlhost="xxx.xxx.xxx.xxx"; // MySQL-Host angeben
    $mysqluser="xxx"; // MySQL-User angeben
    $mysqlpwd="xxx"; // Passwort angeben
    $mysqldb="LaK"; // Gewuenschte Datenbank angeben

    $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die
    ("Verbindungsversuch fehlgeschlagen");

    mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht
    waehlen.");

### Burgen als Datensatz anlegen #################################
	for($i=1; $i < count($burg); $i++)
	   {
	   $burg1 = explode("
", $burg[$i]);    // nach Zeilenumbruch trennen
	   $name = str_replace( "?", "", $burg1[0]);
	   
	   $einlesen = mysql_query("SELECT name FROM burg WHERE name='$name'"); // Abfrage ob Datensatz vorhanden
			if(mysql_num_rows($einlesen)==1) return;                          // Wenn ja nix, Wenn nein anlegen
			else 	   $sql = "
				  INSERT INTO `burg`
				  (
				  `name`
				  )
				  VALUES
				  (
				  '$name'
				  );
				  ";
		$db_erg = mysql_query($sql)
		   or die("Anfrage fehlgeschlagen: " . mysql_error());

			for($t=1; $t < count($burg1); $t++)
			   {
		   	$erz = explode("
", $burg[$t]);    // nach zeilenumbruch trennen
				$speer = str_replace( " ", "", $burg1[3]);
				$speer = substr("$speer", 0, 5 ); // gibt "abcd" zurück
				$schwert =str_replace( " ", "", $burg1[4]);
				$schwert = substr("$schwert", 0, 5 ); // gibt "abcd" zurück
				$bogen =str_replace( " ", "", $burg1[5]);
				$bogen = substr("$bogen", 0, 5 ); // gibt "abcd" zurück
				$armb =str_replace( " ", "", $burg1[6]);
				$armb = substr("$armb", 0, 5 ); // gibt "abcd" zurück
				$panzer =str_replace( " ", "", $burg1[7]);
				$panzer = substr("$panzer", 0, 5 ); // gibt "abcd" zurück
				$lanzen =str_replace( " ", "", $burg1[8]);
				$lanzen = substr("$lanzen", 0, 5 ); // gibt "abcd" zurück
				$hand =str_replace( " ", "", $burg1[9]);
				$hand = substr("$hand", 0, 5 ); // gibt "abcd" zurück
				$ochs =str_replace( " ", "", $burg1[10]);
				$ochs = substr("$ochs", 0, 5 ); // gibt "abcd" zurück
				$silber = sprintf ("%'5s",$burg1[16]);
				$kupfer = sprintf ("%'5s",$burg1[15]);
				$speer = sprintf ("%'5s",$speer);
				$schwert =sprintf ("%'5s",$schwert);
				$bogen =sprintf ("%'5s",$bogen);
				$armb =sprintf ("%'5s",$armb);
				$panzer =sprintf ("%'5s",$panzer);
				$lanze =sprintf ("%'5s",$lanzen);
				$time = strftime("%Y-%d-%m %H:%M:%S");
#				$hand=0;
#				$ochs=0;
				$start="";
				$ziel="";
				$karte="";
				$dauer="";
				$angriff="";
# MySql Datei update ########################################################
				$aendern = "UPDATE burg Set  hand = '$hand', ochs = '$ochs', silber = '$silber', kupfer = '$kupfer', speer = '$speer', schwert = '$schwert', bogen = '$bogen', armb = '$armb', panzer = '$panzer', lanze = '$lanze' WHERE name = '$name'";
				$update = mysql_query($aendern);

			      }
    	}

mysql_close($connection);

?>

Ziel soll sein, wenn der Eintrag schon vorhanden dann nur update, wenn nicht anlegen und dann befüllen.

Für dein Problem gibt es eine native MySQL-Funktion:

Google mal nach „Insert on duplicate Keys update“.

Ist vermutlich deutlich schneller und einfacher, als deine Lösung. Da es nur eine Abfrage ist…

Danke für den Hinweis.
Leider bekomme ich das nicht ans laufen.
ich glaube meine $db_erg Syntax ist falsch.
Hast du einen Tip für mich was ich falsch mache.

 $sql= "INSERT INTO burg (name) VALUES ('$name')
			ON DUPLICATE KEY UPDATE name = $name";
			$db_erg = UPDATE burg SET name=$name WHERE name=$name;
		        or die("Anfrage fehlgeschlagen: " . mysql_error());

Als fehlermeldung kommt das

Parse error:  syntax error, unexpected 'burg' (T_STRING) in [Skripts\L&K\db\db_neu] on line 45
Abort Processing during Fatal-Error: syntax error, unexpected 'burg' (T_STRING)
   Error in Script E:\IP-Symcon\scripts\22849.ips.php on Line 45

[LEFT]Achtung ungetestet !!



 $sql= "INSERT INTO burg (name) VALUES ('$name') 
            ON DUPLICATE KEY UPDATE name = $name"; 
            $db_erg = mysql_query($sql) 
                or die("Anfrage fehlgeschlagen: " . mysql_error());  


und nicht vergessen einen unique key auf „name“ zu setzen…[/LEFT]

Danke das du dich um mein Problen kümmerst.
Leider bekomme ich jetzt folgende Meldung

Anfrage fehlgeschlagen: 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 'Airlines 2' at line 2

Kann das mit meiner mysql Version zusammenhängen? Ich habe die 5.1.36

wenn du Strings updaten willst:



 $sql= "INSERT INTO burg (name) VALUES ('$name') 
            ON DUPLICATE KEY UPDATE name = '$name'"; 
            $db_erg = mysql_query($sql) 
                or die("Anfrage fehlgeschlagen: " . mysql_error());  


Vielen Dank, jetzt klappt es.