2011-06-30 25 views
5

PHP'nin yerleşik MySQLi sınıfının yeteneklerinden yararlanan bir sınıf oluşturdum ve veritabanı etkileşimini basitleştirmesi amaçlandı. Ancak, bir OOP yaklaşımı kullanarak, bir sorgu çalıştırıldıktan sonra doğru sayıda satır döndüren num_rows örnek değişkeniyle zor bir zaman yaşıyorum.PHP MySQLi num_rows Her Zaman Geri Dönüş 0

$db = new Database(); 
$result = $db->query("SELECT * FROM `pages`"); //Contains at least one entry 
echo $result->num_rows; //Returns "0" 
exit; 

Nasıl olur bu doğru değildir: Burada

class Database { 
//Connect to the database, all goes well ... 

//Run a basic query on the database 
    public function query($query) { 
    //Run a query on the database an make sure is executed successfully 
    try { 
    //$this->connection->query uses MySQLi's built-in query method, not this one 
     if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) { 
     return $result; 
     } else { 
     $error = debug_backtrace(); 

     throw new Exception(/* A long error message is thrown here */); 
     } 
    } catch (Exception $e) { 
     $this->connection->close(); 

     die($e->getMessage()); 
    } 
    } 

//More methods, nothing of interest ... 
} 

örnek bir kullanımıdır ... benim sınıfın bir anlık bir göz atın? Sonuç nesnesindeki diğer değerler "field_count" gibi doğrudur. Herhangi bir yardım büyük beğeni topluyor.

Zaman ayırdığınız için teşekkür ederiz.

cevap

5

Olası Hata: http://www.php.net/manual/en/mysqli-result.num-rows.php#104630

Kod yukarıdaki kaynaktan geldiğinden (Johan Abildskov):

$sql = "valid select statement that yields results"; 
if($result = mysqli-connection->query($sql, MYSQLI_USE_RESULT)) 
{ 
      echo $result->num_rows; //zero 
      while($row = $result->fetch_row()) 
     { 
      echo $result->num_rows; //incrementing by one each time 
     } 
      echo $result->num_rows; // Finally the total count 
} 

da Usul tarzı ile doğrulamak Could :

/* determine number of rows result set */ 
$row_cnt = mysqli_num_rows($result); 
+3

Gahh ait

$this->connection->query($query, MYSQLI_STORE_RESULT); 

Eşdeğer varsayılan bayrağı kullanmalıdır ... Çok kolaydı. Bunu işaret ettiğin için teşekkürler. Hem PHP sitesinin örneği hem de örnek sorgularım "MYSQLI_USE_RESULT" sabitini kullanıyordu. Bunu kaldırdım ve bir çekicilik gibi çalışır! Yardımın için teşekkürler, Phil! –

+0

Sadece MYSQLI_USE_RESULT kullanımı için bir not: [** PHP mysql :: query **] (http://es1.php.net/manual/en/mysqli.query.php) _Eğer MYSQLI_USE_RESULT kullanırsanız, sonraki tüm aramalar return error [** mysqli_free_result() **] (http://es1.php.net/manual/en/mysqli-result.free.php) _ aramadıkça senkronizasyon dışı komutlar _ –

1

Bu olabilir normal davranışı MYSQLI_USE_RESULT

ile sonuç satırlarının arabelleğe alınmasını devre dışı bırakırsınız

Arabelleği devre dışı bırakmak, satırları almak, saklamak ve COUNT satırlarına bağlı olduğunuzu ifade eder. Sen

$this->connection->query($query) 
İlgili konular