php - 如何搜索数据库并一次性返回整个数组?
问题描述
所以我的SELECT * FROM Users WHERE age = 21 LIMIT 10
php 脚本中有一个选择状态。现在,我必须遍历行以不断获取新的数据行。我该怎么做,所以它把我的整个数据都变成了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()
来查看有多少项目。
解决方案
要一次性获取所有数据,您可以使用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 = ?";
推荐阅读
- c - 哈希集的交集和并集
- html - CSS过渡不是双向动画
- mysql - 表在程序中指定了两次,如何解决?
- jquery - 无法弄清楚如何获得此功能来仅更改与我单击的图像相关联的标题。总是更改所有标题
- javascript - jQuery 样式表不会加载
- c# - 为什么 TcpClient.Connected() 被 TcpListener 关闭后显示为 true?F#
- haskell - Haskell Lambda 案例或
- java - 为什么 xerces 向我显示“org.xml.sax.SAXParseException:发现以元素开头的无效内容”?
- php - php - 错误文本:字段列表中的未知列“”
- c - 带有 stdcall 的 MinGW 自定义导出函数名称