2010-05-27 18 views
9

Biraz zeki bir PHP-MySQL veritabanı işlemcisi yazmaya çalışıyorum. Bu işlemci bir güncelleme yapması gerektiğine karar verdiğinde, gerçekten başarılı olup olmadığını bildirmek istiyorum. Ben örneğin, daha sonra $result olacağını ID = 1 ile hiçbir satır yoktuPHP, MySQL - etkilenen satırlar ve etkilenen satırlar arasında ayrım yapabiliyor musunuz?

// Example: 
// After running query "UPDATE mytable SET name='Test' WHERE ID=1" 
$result = mysql_affected_rows(); 
if ($result >= 1) { /* Success */ } 

, varsa ... Ben mysql_affected_rows kullanabileceğini düşündüm.

Ancak, PHP'nin mysql_affected_rows fiili etkilenen satırlar, ve satır zaten "Test" idi name ama varsa olmak hala olabileceğini ortaya çıkıyor. (PHP docs bile böyle olduğunu söylüyor). yerine etkilenen bir PHP değeri "Satırlar eşleşti" bu beni almak için herhangi bir yolu var mı

Query OK, 0 rows affected (0.01 sec) 
Rows matched: 1 Changed: 0 Warnings: 0 

: Ben komut satırında bu çalıştırırsanız

, ben sorgu hakkında aşağıdaki meta bilgi almak satırlar?

[Edit]: Ayrı bir sorgu çalıştırabileceğimi bildiğimi bilmeliyim, ancak performans uğruna bunu yapmak istemiyorum. mysql_affected_rows için MySQL documentation itibaren

cevap

12

:

GÜNCELLEME ifadeleri için, mysqld bağlanırken CLIENT_FOUND_ROWS bayrağı belirtirseniz, mysql_affected_rows() maddesi ile eşleşen satır sayısını döndürür. Aksi takdirde, varsayılan davranışı, aslında değiştirilen satır sayısını döndürmektir.

mysqliile, mysqli::real_connect kullanarak CLIENT_FOUND_ROWS belirtebilirsiniz.

$db = mysqli_init(); $db->real_connect('host', 'username', 'password', 'dbname', '3306', null, MYSQLI_CLIENT_FOUND_ROWS); 

PDO
yılında sabit :: PDO adı MYSQL_ATTR_FOUND_ROWS eski ile

$db = new PDO('mysql:dbname=mydatabase;host=myhost', 'username', 'password', array(
    PDO::MYSQL_ATTR_FOUND_ROWS => true 
)); 

ve MySQL uzantısı kullanımdan kaldırılmıştır, sen mysql_connect için 5 parametre olarak değerini 2 geçirerek CLIENT_FOUND_ROWS belirtebilirsiniz (source). eşleşti

Satırlar: 1 Değişen: 0 Uyarılar: 0

Sen çalışabilir

+0

Bu harika. Bana ikisini ayırmak için bir yol sunmasa da (bu yüzden cevabı kabul etmeden önce test edeceğim) benim durumumda tercih edilen durum benim gibi görünüyor. Teşekkürler! – Nicole

+0

Cevabını benimkinden daha iyi seviyorum! :) – Sev

+0

PHP lib MySQL C api lib üzerinde böyle bir şeffaf sarıcı, gerçekten PHP/MySQL api – bobobobo

6

Ayrıca Bu işlev böyle bir dize alır

$variable = mysql_info(); 

işlevini kullanabilirsiniz dizeleri ile değişkenler üzerinde alt dizeleri eşleşen satır sayısı ile ayıklamak ve sahip olmalısınız!

+1

Teşekkürler, bu bana çok yardımcı oldu. Bunları ayrıca şöyle eşleştirebilirsiniz: 'preg_match ('/^\ D + (\ d +) \ D + (\ d +) \ D + (\ d +) $ /', $ değişken, $ eşleşmeler);' – Anonymous

+0

'$ mysqliObject- kullanın "mysqli" uzantısını kullanırken "bilgi". –

İlgili konular