PHP, MySQL - sen eşleşen satır ve satır etkilenen ayırt edebilirsiniz?

2 Cevap php

Ben biraz akıllı bir PHP-MySQL veritabanı işlemci yazmaya çalışıyorum. Bu işlemci bir güncelleme yapmak gerekiyor karar verdiğinde, ben gerçekten başarılı olup olmadığının bildirmek istiyorum. Ben mysql_affected_rows kullanabilirsiniz düşündüm ...

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

Örneğin, ID=1, sonra da $result olacaktır ile bir satır olsaydı 0.

Ancak, PHP'nin mysql_affected_rows gerçek etkilenen satırlar çıkıyor ve satır var ama name zaten "Test" eğer hala 0 şeklinde olabilir. (PHP docs bile bu böyledir demek).

Ben komut satırında çalıştırırsanız, ben sorgu hakkında aşağıdaki meta bilgi alabilirsiniz:

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

Bana yerine etkilenen satırların PHP değer "Satırlar eşleşti" olduğunu almak için herhangi bir yolu var mı?

[Edit]: Ben ayrı bir sorgu çalıştırabilirsiniz biliyorum, ama ben performans uğruna, bunu isterim dikkat etmelisiniz.

2 Cevap

MySQL documentation için kaynaktan mysql_affected_rows,

For UPDATE statements, if you specify the CLIENT_FOUND_ROWS flag when connecting to mysqld, mysql_affected_rows() returns the number of rows matched by the WHERE clause. Otherwise, the default behavior is to return the number of rows actually changed.

mysqli, sen 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 olarak, sabit PDO :: MYSQL_ATTR_FOUND_ROWS adlandırılır

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

Eski ve onaylanmıyor MySQL uzantısı ile, mysql_connect için 5 parametre olarak 2 değerini geçen CLIENT_FOUND_ROWS belirleyebilirsiniz (source).

Ayrıca fonksiyonunu kullanabilirsiniz

$variable = mysql_info();

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

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

Sen eşleşti ve bunu olması gereken satır sayısı ile altdizesine ayıklamak için değişken üzerinde dizeleri fonksiyonları ile çalışabilirsiniz!