Nasıl PDO ile silinen satır sayısı alabilirsiniz?

1 Cevap php

Tamam, ben üzerinde çalışıyorum bir proje için bir PDO wrapper kullanıyorum, ve ben bir DELETE sorgusu başarılı olup olmadığını öğrenmek için çalışıyorum. İşte kullanıyorum kodu:

/**
* A pretty straight-forward query to delete a row from the verification
* table where user_id is $user_id and code is $code
*/
$result = $this->database->query("DELETE FROM verification " .
                                 "WHERE user_id = %u AND code = %s",
                                 $user_id,
                                 $code);

/**
 * This function will grab the PDO's exec() return, which should
 * return the number of rows modified.
 */
if($this->database->getNumAffected($result) > 0)
    return true;
else
    return false;

Sorun DELETE sorgu aslında bir satır siler ya, $ this-> database-> getNumAffected ($ result) her zaman '0 'döndürür olmadığını, olduğunu.

Sen sarıcı kontrol edebilirsiniz, ama temelde $ this-> database-> getNumAffected ($ result) sadece tam olarak aynı değeri PDO :: exec () dönecekti döndürür.

(Bir satır silindi veya olup olmadığını. ') Her zaman geri '1: I (doğrudan PDO'ya) sargı olmadan bu kodu denedim ve aynı sorun vardı ama ters

Herhangi bir yardım büyük mutluluk duyacağız.

EDIT: this SO soruya dayanarak, ben bu çalışmıyor neden doğru ... Ben anlamıyorum her şeyi yapıyorum.

1 Cevap

PDO açıklamada bu everything sarar - kullandığınız 'sarıcı' Hiç PDO :: exec () kullanmak değil çünkü beklediğiniz gibi çalışmıyor. Eğer sağlanan URL'den 'database' sınıf sürümü 2.2.6 için kaynak kodunun bir hızlı okuma göre, 'sorgu' yöntemi deyimi tanıtıcı içeren bir dizi döndürmesi gerekir:

502 $statement = $this -> getDatabaseConnection () -> prepare ( $query );
...
587 $ret = array ( $statement, func_get_args (), $lastIndex );
588     
589 return ( $ret );

Yani, $this->database->query() bu veritabanı sınıfı çağırıyor 'query yöntemi varsayarak, yapmanız gerekir $result[0]->rowCount().

Unutmayın doğru değildir "[sen] sarıcı kullanarak çünkü rowCount () fonksiyonu ile var olan bir hata RowCount farklı bir sürümü () kullanmaktadır" önceki yanıt için iddia - sarıcı bir numRows uygular, ama Bu database::query() döndü deyimi tanıtıcı içinde bozulmamış PDOStatement::rowCount() olarak aynı şey değildir.