首页 > 解决方案 > 如何搜索数据库并一次性返回整个数组?

问题描述

所以我的SELECT * FROM Users WHERE age = 21 LIMIT 10php 脚本中有一个选择状态。现在,我必须遍历行以不断获取新的数据行。我该怎么做,所以它把我的整个数据都变成了O(1)时间复杂度?现在我有一个 while 循环可以做到O(n)

function search($stmt, $age) {
    $sql = "SELECT * FROM Users
            WHERE age = ?
            LIMIT 10";
    if(!mysqli_stmt_prepare($stmt, $sql)) {
        return false;
    } else {
        mysqli_stmt_bind_param($stmt, "i", $age);
        mysqli_stmt_execute($stmt);
        $result = mysqli_stmt_get_result($stmt);
        $outfitArray = [];
        while($row = mysqli_fetch_assoc($result)) {
          $searchResults[] = $row;
        }

        return $searchResults;
    }
}
$conn = mysqli_connect($servername, $dBUsername, $dbPassword, $dbName);
if($conn != false) $stmt = mysqli_stmt_init($conn);

print_r(search($stmt, 21));

我的第二个问题是,我使用什么选择语句来查看放置偏移量。所以如果我得到 50 个结果,我怎样才能得到第 40 - 50 个结果的结果。


我的第三个问题是,如何在将所有结果放入数组或使用循环的情况下获得搜索结果的数量?然后使用类似的东西count()来查看有多少项目。

标签: phpmysqldatabase

解决方案


要一次性获取所有数据,您可以使用mysqli_fetch_all()例如

$searchResults = mysqli_fetch_all($result, MYSQLI_ASSOC);

请注意,您需要MYSQLI_ASSOC将此函数的默认值指定为MYSQLI_NUM.

要从 41-50 获取行,您可以在限制子句中使用偏移量:

LIMIT 40, 10

请注意,LIMIT不使用 anORDER BY是没有意义的,因为无法保证行的顺序,并且每次执行查询时可能会得到不同的结果。您可能希望按id、 或用户名或类似名称进行订购。

要获取搜索结果的数量,请将查询更改为使用COUNT

$sql = "SELECT COUNT(*) AS num_results FROM Users WHERE age = ?";

推荐阅读