Aşağıda verdiğim kodla XML'den gelen veriyi 1000'erli grup halinde timeout almadan veritabanına kayıt edebilirsin diye düşünüyorum. Deneyip haber verir misin?
<?php
$__DBHOST = "localhost";
$__DBUSER = "root";
$__DBPASS = "";
$__DBNAME = "xmltest";
try {
$db = new PDO("mysql:host=$__DBHOST;dbname=$__DBNAME;charset=utf8", $__DBUSER, $__DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Veritabanı bağlantısı başarısız: " . $e->getMessage());
}
$xmlDosyaYolu = "test.xml";
$xml = simplexml_load_file($xmlDosyaYolu);
$veriSayisi = count($xml->item);
$batchSize = 1000;
for ($i = 0; $i < $veriSayisi; $i += $batchSize) {
try {
$db->beginTransaction();
for ($j = $i; $j < $i + $batchSize && $j < $veriSayisi; $j++) {
$veri = $xml->item[$j];
$stmt = $db->prepare("INSERT INTO tablo_adi (sutun1, sutun2, sutun3) VALUES (:deger1, :deger2, :deger3)");
$stmt->bindParam(':deger1', $veri->sutun1);
$stmt->bindParam(':deger2', $veri->sutun2);
$stmt->bindParam(':deger3', $veri->sutun3);
$stmt->execute();
}
$db->commit();
} catch (PDOException $e) {
$db->rollBack();
die("Hata: " . $e->getMessage());
}
}
echo "OK";
?>