Ich habe mehrere Datendateien wie folgt aus:PHP PDO TRY. Umgang mit Dubletten
- table 1 - table 2 - table 3
id val id val id val
============ ========== ===========
1 one 1 uno 1 un
2 two 4 dos 6 deux
3 three 5 tres 7 trois
ich sie in einer Datenbank einzufügen bin versucht erwarten:
= result table
id val
============
1 one
2 two
3 three
d1 uno
4 dos
5 tres
dd1 un
6 deux
7 trois
Die Datenbankstruktur ist:
= sqlite database file: data.db
CREATE TABLE register (
id VARCHAR(3) PRIMARY KEY,
val VARCHAR(16)
);
Ich bin mit dieser Art von Lösung gekommen:
<?php
$table1 = array("1"=>"one","2"=>"two","3"=>"three");
$table2 = array("1"=>"uno","4"=>"dos","5"=>"tres");
$table3 = array("1"=>"un","6"=>"deux","7"=>"trois");
$fileHandle = new PDO("sqlite:data.db");
$fileHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach($table1 as $key => $value){
try{
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('".$key."', '".$value."');");
}catch(PDOException $e){
if($e->getCode()=='23000'){ // if key exists, add a "d" to differentiate
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('d".$key."', '".$value."');");
}
}
}
// keys: 1, 2, 3
foreach($table2 as $key => $value){
try{
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('".$key."','".$value."');");
}catch(PDOException $e){
if($e->getCode()=='23000'){ // if key exists, add a "d" to differentiate
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('d".$key."', '".$value."');");
}
}
}
// keys: 1, 2, 3, d1, 4, 5
foreach($table3 as $key => $value){
try{
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('".$key."', '".$value."');");
}catch(PDOException $e){
echo " getCode : ".$e->getMessage()."\n";
if($e->getCode()=='23000'){ // if key exists, add a "d" to differentiate
$fileHandle->exec("INSERT INTO `register` (id,val) VALUES ('d".$key."', '".$value."');");
}
}
}
// Signals error on the INSERT in the CATCH body
?>
Aber stecken auf dem zweiten Auftreten eines Schlüssels. Generieren eines doppelten Schlüssels (d1) im Beispiel
Ich kann das sich wiederholende Muster sehen, aber ich sehe nicht, wie man es kondensiert. Oder wiederholen Sie den geänderten Schlüssel.
Vielen Dank im Voraus für Ihre Eingabe.
Versuchen, meine Frage zu konzentrieren. Keine der Strukturen kann geändert werden; Die Daten und die Datenbank existieren bereits (mit Tausenden von Datensätzen). Das Ziel ist, doppelte IDs einzufügen (welche Einschränkungen verhindern), indem man sie ein bisschen ändert. Wenn wir also drei Datensätze mit derselben ID 1, 1, 1 haben, würden sie in die Datenbank als 1, d1, dd1 einfügen. –