2015-06-02 91 views
5

我正在學習使用MySQL的OOP PHP。我想運行一個查詢,應該打印返回的行數。我的PHP代碼如下:計算OOP中的返回行數PHP

$con= mysqli_connect('localhost','root','','dealinte_cms') or die(mysqli_error()); 
$email="[email protected]"; 
if($r=$con->prepare("SELECT * FROM user WHERE email=? ")){ 
$r->bind_param("s",$email); 
    if(!$r->execute()){ 
     echo mysqli_errno($con); 
    } 
    else{ 
     $rowCount=$r->num_rows; 
     echo $rowCount; 
    } 
} 

在我的數據庫,郵件是在4行,所以它應該打印4,但它顯示0

請告訴我錯我的代碼?

回答

3

您必須store result

$r->store_result(); 

而且也之前您檢查行計數。請參閱手冊頁

被告知請人誰有時會錯過閱讀此功能這一重要的手動輸入在這樣一個字條:

如果你不使用mysqli_stmt_store_result(),和immediatley調用這個函數在執行準備語句之後,此函數通常會返回0,因爲無法知道結果集中有多少行,因爲結果集尚未保存在內存中。

提示

既然你是學OOP PHP與MySQL,一定要注意,到MySQL創建的連接是程序風格的語法是很重要的。而在PHP中,你可能會逃避,但在許多其他語言中你不會。爲什麼不把它轉換成OOP語法呢?

$con= new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
+0

哦,我不知道。 – partho

0

您需要使用store_result()存儲結果。瞭解更多here

所以,你的代碼應該是這樣的:

<?php 
$con= mysqli_connect('localhost','root','','dealinte_cms') or die(mysqli_error()); 
$email="[email protected]"; 
if($r=$con->prepare("SELECT * FROM user WHERE email=? ")){ 
$r->bind_param("s",$email); 
    if(!$r->execute()){ 
     echo mysqli_errno($con); 
    } 
    else{ 
     $r->store_result(); 
     $rowCount=$r->num_rows; 
     echo $rowCount; 
    } 
} 
?>