I ditt fall är den bästa lösningen den enklaste, så bara skapa fem frågor, du kan till och med göra det i slingan:
$pdo = new PDO("mysql:host=127.0.0.1;dbname=yourdbname;charset=utf8", "username", "password");
if (($handle = fopen("test.csv", "r")) !== FALSE) {
$row = 1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($row == 1) {
$row++;
continue;
}
$row++;
foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
$stmt = $pdo->prepare("INSERT INTO $table (name, title) VALUES (?,?)");
$stmt->execute([$data[0], $data[1]]);
}
}
fclose($handle);
}
Eller för UPPDATERING med uid ersätt forech:
foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
$stmt = $pdo->prepare("UPDATE $table SET name=?, title=? WHERE uid=?");
$stmt->execute([$data[0], $data[1], $uid]);
}
Eller ännu bättre med INSERT eller UPDATE, notera att i det här fallet använder vi namngivna params.
foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
$stmt = $pdo->prepare("INSERT INTO $table (uid, name, title)
VALUES (:uid, :name, :title)
ON DUPLICATE KEY UPDATE name=:name, title=:title");
$stmt->bindValue('uid', $uid);
$stmt->bindValue('name', $data[0]);
$stmt->bindValue('title', $data[1]);
$stmt->execute();
}
SQL för table1
.. table5
CREATE TABLE table1 (
uid int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
title varchar(255) NOT NULL,
PRIMARY KEY (uid)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
Obs! När du ska beskriva bättre hur du vill bibehålla unikhet kommer jag förmodligen att lägga till några andra lösningar. Just nu vet koden inte om James, chef från CSV, är samma James, chef i DB.