Mysql - Problem Datensatz kopieren - Sonderzeichen im Feld

Klausi2000

Mitglied
Hallo,

ich muß Daten innerhalb der gleichen Tabelle kopieren ... es ändern sich nur 2-3 Werte, dafür versuche ich folgende Vorgehensweise:

Code:
$article_query = "SELECT * FROM `articles` where storeId=$storeId limit 1";
....
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {


$line['id'] = $new_article_id;
$line['storeId'] = $new_storeId;
$line['editorStoreId'] = $new_editorStoreId;



foreach ($line as $schluessel => $wert) {
$insert_values[] = $schluessel;
$insert_inserts[] = $wert;
}


$insert_new_article = mysql_query("INSERT INTO articles VALUES('".implode("','", $insert_inserts)."'")or die("Anfrage fehlgeschlagen: " . mysql_error());

==> In einem meiner Datenfelder steht eine längere Beschreibung des Artikels, darin können sowohl Sonderzeichen als auch ",' oder / vorkommen ... und genau bei den Hochkommata läuft mir da Script regelmässig gegen die Wand ...

Wie kann ich nun die im Array $wert stehenden Daten so maskieren, dass sie 1:1 kopiert werden?

Wenn ich mir die Daten einfach nur ausgeben lasse, sieht es eigentlich gut aus ... das mit dem implode hab ich irgendwo gefunden ... müsste aber so gehen.

Habt ihr eine Idee?

Wie kopiert ihr beliebige Datensätze innerhalb einer Tabelle wo ich die insert...selects nicht nutzen kann?

Gibt es einen einfacheren Weg als jede Variable einzeln zu packen und zu bearbeiten?

Danke,
Christian
 
1. Beim Insert immer die Texte über mysql_real_escape_string() übergeben. Damit werden solche Sonderzeichen ausmaskiert.

2. Du kannst die Kopie auch über eine Temporäre Tabelle machen:

Code:
create temporary table temp
select * from tabelle WHERE ...

insert into tabelle select * from temp

gegebenenfalls musst du noch ein evtl. vorhandenes auto_increment Feld in der temporären Tabelle auf 0 setzen, bevor du es wieder per INSERT einfügen kannst.

Gruß Marian
 
Danke ersteinmal für deine Mühe!! - Ich musste mich kruzfristig um etwas Anderes kümmern und so ist erst jetzt wieder Zeit für mein Lieblingsproblem.

Ich glaub, ich komme um die temporäre Tabelle nicht herum - denn das Array kann ich mysql_real_escape_string() nicht übergeben, da meckert es ... mach ich vorher eine foreach-schleife und lasse mysql_real_escape... in dieser Schleife auf die Werte los - ändert sich nix, wenn ich sie danach mit implode wieder auseinander bastel.

Dann muß es halt über die temporäre Tabelle gehen ... muß ich die danach eigentlich wieder löschen? Wie lange bleibt sie sonst bestehen?

Danke.
Christian
 
Zurück