php - 如何限制 MySQL 查询返回的结果?
问题描述
我有这段代码,效果很好。唯一的问题是我会一次得到多个结果,而我只需要一个。假设我正在寻找帐户#2,如果我在输入框中输入 2 name="id" ,我将得到所有带有数字 2 的结果。如果我想查找特定人的姓名,我输入名字,然后我输入另一个姓氏。它会带来我想要的名字,但它会带来我输入的姓氏的其他结果。如何设置我寻找的结果的限制,以便我得到匹配或不匹配?我仍在学习。谢谢你
PS。可以说,我无法指定 LIMIT 1 ..
$searchFields = [];
foreach (['id', 'firstname', 'lastname', 'email'] as $searchField) {
if (!empty($_POST[$searchField])) {
$searchFields[$searchField] = $_POST[$searchField];
}
}
if (count($searchFields) > 0) {
$queryStr = "SELECT * FROM `Demo_Guests` WHERE 0";
foreach (array_keys($searchFields) as $fieldName) {
$queryStr .= " OR " . $fieldName . " LIKE :" . $fieldName ;
}
//var_dump($queryStr);
$stmt = $conn->prepare($queryStr);
foreach($searchFields as $fieldName => $fieldValue) {
$stmt->bindValue(':'. $fieldName, "%$fieldValue%", PDO::PARAM_STR);
}
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
//var_dump($result);
} else {
echo "";
}
}
catch(PDOException $e){
echo $e->getMessage();
}
}
解决方案
可以添加LIMIT 1
到末尾$queryStr
。
$queryStr = "SELECT * FROM `Demo_Guests` WHERE 0";
foreach (array_keys($searchFields) as $fieldName) {
$queryStr .= " OR " . $fieldName . " LIKE :" . $fieldName ;
}
$queryStr .= " LIMIT 1";
推荐阅读
- db2 - DB2 - 查找视图列的源表
- asp.net-mvc - ASP .NET Core Identity - 如何更新用户的单个详细信息?
- python - 在 scapy 中,如何从 TacacsAuthorizationRequest 中的 fields_desc 列表中获取相应的 ByteEnumField 值?
- arrays - 尝试将具有另一个对象数组的对象数组从 vu 发送到 laravel 控制器
- python - Python:ValueError:不能同时执行聚合和转换操作
- function - Julia中一维随机游走的阶梯函数
- java - Java比较两个数组以进行登录
- python - 如何在字符串列表中获取子字符串的部分匹配?
- amazon-web-services - AWS S3:如何通过 Content-Type 限制文档上传?
- templates - ServiceNow 模板 - “与其他用户共享此票证”