Я выполняю пакетную вставку в приведенном ниже коде, извлекаю данные из базы данных и вставляю их в другой источник, данные вставляются полностью, за исключением последней строки. Вместо этого дублируется вторая последняя строка.
В журнале ошибок также отображаются фактические данные о количестве строк.
Я выполняю пакетную вставку в приведенном ниже коде, извлекаю данные из базы данных и вставляю их в другой источник, данные вставляются полностью, за исключением последней строки. Вместо этого дублируется вторая последняя строка. В журнале ошибок также отображаются фактические данные о количестве строк. [code] try { // Connection to source database $sourceDB = new PDO("mysql:host=$hostSource;dbname=$dbSource", $userSource, $passSource); $sourceDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Connection to target database $targetDB = new PDO("mysql:host=$hostDest;dbname=$dbDest", $userDest, $passDest); $targetDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Step 1: Extract data from source database $query = "SELECT * FROM chapter_contributor_info"; $sourceData = $sourceDB->query($query)->fetchAll(PDO::FETCH_ASSOC);
// Step 2: Transform data (lowercase email, etc.) foreach ($sourceData as &$row) { $row['email'] = strtolower($row['email']); }
// Step 3: Clear existing data in the target table $targetDB->exec("DELETE FROM chapter_contributor_info");
// Step 4: Insert data in batches $batchSize = 50; // Adjust batch size as needed $dataCount = count($sourceData); $targetDB->beginTransaction(); // Start transaction for performance $insertedCount = 0; // Counter for successfully inserted rows $failedInserts = []; // Array to store failed insertions
for ($i = 0; $i < $dataCount; $i += $batchSize) { // Avoiding repetition of the last row in the batch $batchData = array_slice($sourceData, $i, $batchSize);
// Ensure no repetition in the last row if ($i + $batchSize > $dataCount) { $batchData = array_unique($batchData, SORT_REGULAR); }
$targetDB->commit(); // Commit the transaction echo "Data successfully extracted, transformed, and inserted into chapter_contributor_info in batches. Total inserted rows: $insertedCount.";
// Log failed insertions if (!empty($failedInserts)) { file_put_contents('failed_inserts.log', print_r($failedInserts, true), FILE_APPEND); echo "Some rows failed to insert. Check failed_inserts.log for details."; }
} catch (PDOException $e) { // Roll back the transaction in case of error if ($targetDB->inTransaction()) { $targetDB->rollBack(); } echo "Error: " . $e->getMessage(); }