2009-05-28 14 views
44

PHP'yi kullanarak bir kaydı silmeye çalışıyorum, ancak başarılı olup olmadığını kontrol etmek istiyorum. DELETE FROM foo where bar = 'stuff' başarılı bir şeyden döndü mü?Başarılı bir MySQL DELETE ne döndürüyor? DELETE başarılı olup olmadığı nasıl kontrol edilir?

Alternatif olarak, DELETE'nin başarılı olup olmadığını kontrol etmenin başka yollarını biliyor musunuz? Yoksa silmeden önce satırın var olduğundan emin olmaktan daha mı iyi olurum? Mümkünse başka bir sorgudan kaçınmaya çalışıyorum.

cevap

53

Eğer mysql_query kullandığınız varsayarak:

SQL ifadeleri, INSERT, UPDATE diğer türü için, ) (, mysql_query vb, DAMLA, SİL hata başarısı üzerine DOĞRU veya YANLIŞ döndürür.

PDO :: exec() SQL deyimiyle silinen veya değiştirilen satırların sayısını döndürür:

Eğer PDO::exec kullanıyorsanız, o zaman elle bunu söylüyor. hiçbir satır etkilendi PDO :: exec() döndürür 0.

çulluk cevap vermek istemiyorum, ama bu yanıt seçildi beri, o mysql_query bile sorgu eğer TRUE dönecektir unutmamalıdır aslında hiçbir şey kaldırmadı. Bunu kontrol etmek için mysql_affected_rows kullanmalısınız. Sorundan etkilenen satır sayısı hakkında bakım

+4

Oh hayır "çulluk cevap vermek istemiyorum"! Benim kıymetli, değerli puanlarım değil! =) Mysql_affected_rows için – biggusjimmus

+0

+1 –

+1

Etkilenen satır sayısını almak için PDO :: execute() yöntemini kullanıyorsanız, PDO :: rowCount() – Alan

32

Ayrıca,:

[Kullanım] mysql_affected_rows(), bir DELETE, INSERT etkilenen kaç satır öğrenmek DEĞİŞTİR veya UPDATE deyimi için. sorgunuzla sonra yer php kodu, bu deneyebilirsiniz

+2

Beni döv! Sorunun doğru şekilde oluşturulduğu ancak hiçbir şey silmediyse mysql_query() öğesi TRUE değerini döndürdüğünden, bunun> 0 olduğunu kontrol etmek yararlıdır. – ceejayoz

+0

@ceejayoz Silmek için hiçbir şey olmadığından veya bir hata yüzünden herhangi bir şey silmediğini açıklayabilir misiniz? – MaxZoom

+0

@MaxZoom Bir hata varsa, 'mysql_query'' FALSE' döndürecektir. Silmek için hiçbir şey yoksa, "mysql_query", "TRUE" değerini döndürür ve "mysql_affected_rows", "0" olur. Yani, artık 'mysql_query' ** ** kullanmamalısınız dedi. – ceejayoz

13

çalıştırır:

if (mysql_affected_rows() > 0) { 
    echo "You have successfully updated your data.<br><br>"; 
} 
else { 
    echo "The data you submitted matched the current data so nothing was changed.<br><br>"; 
} 
İlgili konular