2013-07-11 43 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]);