2013-07-11 67 views
1

我想找到一種方法來獲取從PHP使用Select查詢時獲取的行數。PHP準備語句獲取大小

代碼片段:

$conn = new mysqli("8.8.4.4", "reader", "youwishyouknew", "perf_test"); 
if($conn->connect_errno){ 
    echo 'Failed to connect to Database: ('.$conn->connect_errno.') '.$conn->connect_error; 
} else { 
    $query = 'SELECT score, date FROM tbl_runs WHERE client_id = '.$_POST['device'].' AND os_id = '.$_POST['os'].' AND test_id = '.$_POST['test'].' ORDER BY date ASC'; 
    $results = $conn->prepare($query); 
    $results->execute(); 
    $results->bind_results($test_score, $test_date); 
    while($results->fetch(){ 
     $tests[0][] = $test_date; 
     $tests[1][] = $test_date; 
    } 
} 

這一切工作就好了。但我有興趣看看有多少結果實際返回,而不計算調用fetch()多少次?

+0

您可以使用rowCount。 –

+0

非常感謝:D – AndMim

+0

由於您使用的是mysqli,您必須**使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param)。 php)方法將'$ _POST'數據引入您的查詢,而不會創建巨大的[SQL注入漏洞](http://bobby-tables.com/)。你不能使用字符串連接在沒有[正確轉義]的情況下編寫查詢(http://bobby-tables.com/php)。 – tadman

回答

3

對於mysqli的,你可以使用$results->num_rows

$results = $conn->prepare($query); 
$results->execute(); 
$results->bind_results($test_score, $test_date); 
while($results->fetch(){ 
    $tests[0][] = $test_date; 
    $tests[1][] = $test_date; 
} 
$count = $results->num_rows; 

參見http://www.php.net/manual/en/mysqli-stmt.num-rows.php

請記住,在任何MySQL客戶端,正確的數量在獲取所有行之前,結果中的行是未知的。所以你必須在上面例子中的 while循環之後閱讀num_rows

例外:如果你使用$results->store_result()​​後,這使得MySQL客戶端「下載」內部的所有行,隨後的fetch()電話只是遍歷內部緩存結果。如果您使用此功能,您可以隨時讀取num_rows值:

$results = $conn->prepare($query); 
$results->execute(); 
$results->store_result(); 
$count = $results->num_rows; 
$results->bind_results($test_score, $test_date); 
while($results->fetch(){ 
    $tests[0][] = $test_date; 
    $tests[1][] = $test_date; 
} 
1

您可以使用rowCount

$count = $results->rowCount(); 
+1

'rowCount()'是一個PDO方法。 OP使用mysqli,所以這是行不通的。他/她需要爲mysqli語句使用['$ results-> num_rows'](http://www.php.net/manual/en/mysqli-stmt.num-rows.php)。 –

+0

傻了,我完全錯過了第一行,只是看着$ results-> fetch()。你是對的。 – aynber

1

,可以看到有多少結果居然是返回不計多少次取()被調用?

肯定。

$count = count($tests[0]);