Във вашия случай най-доброто решение е най-простото, така че просто създавайки пет заявки, можете дори да го направите в цикъла:
$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);
}
Или за UPDATE с uid заменете 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]);
}
Или още по-добре с INSERT или UPDATE, имайте предвид, че в този случай използваме именувани параметри.
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 за 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
Забележка: Когато опишете по-добре как искате да запазите уникалността, вероятно ще добавя някои други решения. В момента кодът не знае дали Джеймс, шеф от CSV, е същият Джеймс, шеф в DB.