mysql hataları devam

4 Cevap php

Ben bir PHP foreach döngüsü ve bunun içinde bir mysql insert deyimi var. Döngü benim veritabanına veri ekler. Ben daha önce bu konuda koştu ama ne oluyor düşünüyorum insert bir yinelenen kayıt ulaştığında (ben ekleme sonra "ya da öl" deyimi yok) ölür olduğunu hiç. Tabloda yinelenen kayıtları var olsa bile, bu sadece devam etmek gerekir. Bunu yapmak için belirtmeniz gereken bir şey var mı?

Ben başka bir tablodan bazı kayıtları transfer ediyorum. Şu anda, ben 20 tablo içerisinde 1. kayıtları ve masa # 2 sadece 17 var. Ben 3 kayıtlarını kaçırıyorum ama sadece bir bu masaya kısıtlamayı ihlal eden çoğaltılamaz vardır. Diğer iki kayıt eklendi olmalıdır. Biri bana burada bir tavsiyede bulunabilir miyim?

4 Cevap

Ne oluyor PHP mysql insert başarısız olduğunda bir uyarı atma ve bu uyarı üzerine durduruluyor olmasıdır. Hedefinizi gerçekleştirmek için en iyi yolu:

  1. Bir özel durum işleyici oluşturun
  2. Uyarılar için istisna işleyicisi kullanmak için PHP ayarlayın.
  3. Bir try / catch içine ekleme girişimi sarın
  4. Eğer istisna / uyarı, log veya çıkış mysql hatası ama komut dosyası yürütülmesine devam ya yakalamak zaman.

Bu komut size sorunu açıklayan aynı zamanda süre durmadan devam etmesini sağlayacaktır.

Whats yanlış, ama sadece fonksiyonun önünde @ ekleyerek denemek ölüyor engellemek için anlamaya gerekir değil iyi bir yoldur nedeni

@mysql_query = ...

Bu etrafında bir yolu sadece eklemek üzereyiz kayıt için veritabanını sorgulamak olacaktır. Yinelenen bir kayıt eklemek için çalışırken bu şekilde, sorgularının dizi ölmeyecek.

Bir biraz daha verimli çözüm, tek sorguda eklediğiniz tüm çiftleri çıkarın, ardından yenilerini eklemek üzereyiz kayıtların [i] bütün [/ i] sorgulamak olacaktır.

Eğer bir INSERT deyimi ile birden çok satır ekleyebilir misiniz?

INSERT INTO xyz (x,y,z) VALUES
  (1,2,3),
  (2,3,5),
  (3,4,5),
  (4,5,6)

Then you might want to consider prepared statements
...or adding the IGNORE keyword to your INSERT statement

INSERT IGNORE INTO xyz (x,y,z) VALUES
  (1,2,3),
  (2,3,5),
  (3,4,5),
  (4,5,6)

http://dev.mysql.com/doc/refman/5.0/en/insert.html diyor ki:

If you use the IGNORE keyword, errors that occur while executing the INSERT statement are treated as warnings instead

Hala uyarıları getirebilir ancak ekleme iptal olmayacak.