2011-06-30 314 views
5

我已經構建了一個利用PHP內置MySQLi類的功能的類,它旨在簡化數據庫交互。但是,使用OOP方法時,使用num_rows實例變量返回查詢運行後的正確行數時遇到困難。看看我的課的快照...PHP MySQLi num_rows總是返回0

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 ... 
} 

下面是一個簡單的用法:

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

爲什麼這是不準確?結果對象中的其他值是準確的,例如「field_count」。任何幫助是極大的讚賞。

謝謝你的時間。

回答

5

可能的錯誤:http://www.php.net/manual/en/mysqli-result.num-rows.php#104630

代碼是從上方源(約翰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 
} 

也可以與程序風格驗證:

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

Gahh的......它是那麼容易。感謝您指出了這一點。 PHP網站的例子和我的示例查詢都使用了「MYSQLI_USE_RESULT」常量。我刪除了它,它就像一個魅力!感謝您的幫助,菲爾! –

+0

只需使用MYSQLI_USE_RESULT注意: [** PHP mysql :: query **](http://es1.php.net/manual/en/mysqli.query.php)_如果您使用MYSQLI_USE_RESULT,則所有後續調用將會返回錯誤除非您調用[** mysqli_free_result()**](http://es1.php.net/manual/en/mysqli-result.free.php),否則命令不同步_ –

1

這可能是正常的行爲,當您禁用緩衝結果行與MYSQLI_USE_RESULT

禁用緩衝區意味着它取決於您取回,存儲和存儲行數。 你應該使用默認的標誌

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

等效

$this->connection->query($query)