1

我试图找到一种方法来获取使用SelectPHP 查询时获取的行数。

代码片段:

$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()

4

3 回答 3

4

对于 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()after execute(),这会使 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;
}
于 2013-07-11T18:26:57.677 回答
1

您可以使用rowCount

$count = $results->rowCount();
于 2013-07-11T17:50:06.523 回答
1

在不计算调用 fetch() 的次数的情况下,可以查看实际返回了多少结果?

当然。

$count = count($tests[0]);
于 2013-07-11T18:44:44.333 回答