PHP nasıl MySQL / geri alma taahhüt uygulayabilirsiniz?

2 Cevap php

Peki temelde Bazen zaman aşımına yürütmek ve uzun zaman alır ve benim veritabanı etrafında yüzen yarı-komple verileri bırakır Bu komut dosyası var. (Evet ben kaydedilmesini ve kurtulma uygulanması BU yerine düzeltmek istiyorum mükemmel bir dünyada biliyorum ama ben zorlanıyorum yapmak değil)

İşte (basitlik için dumbed) benim temel kodu:

$database = new PDO("mysql:host=host;dbname=mysql_db","username","password");

while (notDone())
{
    $add_row = $database->prepare("INSERT INTO table (columns) VALUES (?)");
    $add_row->execute(array('values'));

    //PROCESSING STUFF THAT TAKES A LONG TIME GOES HERE
}

$database = null;

Yani benim sorun olduğunu eğer bu süre döngü içinde tüm süreci sonra eklenen satır orada kalmasını istemiyorum tam değilse. Ben bir şekilde bunu yapmak için while döngüsünün başında ve sonunda commits / rollbacks kullanabilirsiniz düşünüyorum ama nasıl bilmiyorum.

2 Cevap

PDO ile işlemlerden this tutorial bir göz atın.

Temelde uzun süren sarma kodu:

$dbh->beginTransaction();
...
$dbh->commit();

Ve according to this PDO document page:

"Komut dosyası biter ya da bir bağlantı olağanüstü bir işlem varsa, kapalı üzereyken, PDO otomatik olarak geri döner zaman."

Yani komut dosyası zaman aşımına zaman bekleyen edildi işlem kaybedersiniz.

Ama gerçekten, bu scriipt hayatta kalmak bağlı değildir ki, bu yeniden gerek.

PDO veya onları destekleyen MySQLi gibi herhangi bir kütüphane kullanımı daha sonra işlemler için InnoDB tabanlı tabloları kullanmak gerekir.