Veri Girme önce bir veritabanı içinde çoğaltır kontrol edin

4 Cevap php

Bir veritabanına veri girme önce, ben sadece veritabanı zaten veritabanında aynı kullanıcı adına sahip olmadığını kontrol etmek istiyorum.

Ben bir anahtar olarak ayarlamak SQL adı var, bu yüzden bu amaçla çoğaltılamaz olamaz, ama ben bir daha kullanıcı dostu bir hata mesajı ardından "KEY zaten var" bulma bakıyorum.

Değişken değeri zaten bir satır olup olmadığını denetlemek için basit bir yolu var mı?

4 Cevap

Insert denemeden önce bir çek preform veya durum yakalamak ve uygulamada daha temiz ve kullanıcı dostu bir şekilde görüntülemek ya.

Edit: this tutorial on PHP exception handling bir göz atın. Muhtemelen sorgu bir try-catch bloğu içinde yürütülmesine, gibi pek sarmak istiyorum:

try
{
    // do your query here (it's been forever since I've used PHP)
}
catch(Exception $e)
{
    // display a clean error to the user
}

Yerine genel bir türü Exception yakalamak, bunu ne olursa olsun gerçekten gibi (bir şey MySQLDuplicateKeyException alıyoruz ne istisna tür anlamaya istiyorum, ya olacak, - dışında yankı özel durum test ederken olsun, ve) o kullanın. Aslında, (örneğin bir DB bağlantı hatası gibi) başka bir sorun varsa, bu yolu, varolan bir kullanıcı adı kullanıcıyı bilgilendiren bir hata görüntüler olmaz.

İyi şanslar!

Veri var olup olmadığını kontrol etmek için teknik sorgu vermek için:

 SELECT COUNT(*) FROM YourTable WHERE YourKeyCol = YourKeyValue

ve sonra kümesi içinde sadece döndürülen satırın ilk döndü sütunu inceleyin. O 0 içeriyorsa, veri yoktu aksi halde bulundu.

Diğerleri işaret Ama, sadece devam edin ve INSERT verebilir. Başarısız olup olmadığını belirlemek için hata kodunu inceleyin. Veri veritabanında değil zaten bu durumlar için, iki yerine tek bir sorgu çalıştırmak olacaktır, çünkü bu daha performanslısı.

There might be a special way to do this depending on what RDBMS you are using. For example, using MySQL, you can say

INSERT INTO table (username,value) VALUES ('foo',123) ON DUPLICATE KEY UPDATE value = 123;

Zaten username, benzersiz bir anahtar olarak kurdum beri, bu ('foo',123) table takın foo tabloda değil zaten sadece. Halen mevcut ise, o zaman value güncellenir.

Yoksa, sizin gibi bir şey kullanabilirsiniz

INSERT IGNORE INTO table (username,value) VALUES ('foo',123)

Hangi foo tabloda zaten varsa ekleme sayar.

Bunu yapmak için iki yoldan düşünebilirsiniz.

İlk herhangi çiftleri tespit etmek bu kullanıcı üzerinde önceden bir select deyimi yapmak için basitçe. Bir satır döndürdü o zaman bu kullanıcı adı zaten var olduğunu biliyoruz.

Diğer Eğer mysql_errno, daha sonra sadece belirli bir hata numarası için denetler bir if deyimi olabilir kullanarak hata sayısını döndürmek için mysql alabiliriz. Bu alan göstermeyebilir bu ile tek sorun anahtarının bir kopyası.

Ben komut öncesi bir select deyimi kullanılmıştır.