Ben CodeIgniter veritabanında (aynı tablo) bazı satırları eklemek için küçük bir yöntem çalıştırıyorum. Hangi ekleme işleminin bir işlemde başarısız olduğunu görmek istiyorum (bir dizi başlık döndürerek). Benim kodudur:Codeigniter, işlemde hata izleme
$failure = array(); //the array where we store what failed
$this->db->trans_start();
foreach ($data as $ressourceCsv){ //data is an array of arrays to feed the database
$this->ajout_ressource($ressourceCsv); //method to insert (basically, just an insert with active record)
if (($this->db->_error_message())!=null) {
$failure[] = $ressourceCsv['title'];
}
}
$this->db->trans_complete();
return $failure;
gerçektir ki ben bunu bir işlem yapmazsanız (hayır $ this-> _... db-> trans), bu mükemmel çalışıyor ve birkaç içeren bir dizi var başlıklar. Ancak işlemle, dizi ilk hatadan beri her başlık içerir. Ekleme işleminden başlayarak, işlemin geri alınmasına neden olan başlığı almanın bir yolu var mı?
Ben de birlikte çalıştık:
$failure = array(); //the array where we store what failed
$this->db->trans_start();
foreach ($data as $ressourceCsv){ //data is an array of arrays to feed the database
if (!$this->ajout_ressource($ressourceCsv)) { //active record insertion return true
$failure[] = $ressourceCsv['title']; // if successful
}
}
$this->db->trans_complete();
return $failure;
Ok, ben, değil alırsanız İşlemlerin çok yapısı, istediğim gibi ilerlememe izin vermiyor. Ayrıca $ this-> db-> trans_status() === FALSE değerini kullanamıyorum çünkü aslında işlem satırlarını if deyiminde (her zaman bir işlem kullanmıyorum) sardım. Benim sorunu çözmek için, sonunda bir rollback ve $ başarısızlık dizisi boş değilse ben sonunda onları silmek için başarılı ekleme id idrarını saklıyorum – Dargor
Eğer ** olursa olsun tüm ekler aynı anda herhangi bir başarısızlıktan sonra bunu yapabilirsin, ama eğer niyetiniz, eğer kimsenin başarısız olması durumunda bu eklerden herhangi birini görmeyecekse, o zaman bu şekilde başaramazsınız. "Kabul edilen" adlı bir boolean sütunu olabilir ve yalnızca tüm ekler bittikten ve hiçbiri başarısız olduktan sonra TRUE ayarlayabilir ve diğer sorgularınıza "WHERE accepted = TRUE" ifadesini ekleyebilirsiniz. – user9645
İsterseniz, döngüyü bir işlemin içinde nasıl yapacağınızı göstermek için Güncelleştirmeyi ekledim. – user9645