我有这段代码,效果很好。唯一的问题是,我将一次获得多个结果,而我只需要一个。假设我正在寻找帐户2,如果我在输入框name =“ id”中输入2,我将得到所有具有数字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();
}
}
答案 0 :(得分:1)
您可以将LIMIT 1
添加到$queryStr
的末尾。
$queryStr = "SELECT * FROM `Demo_Guests` WHERE 0";
foreach (array_keys($searchFields) as $fieldName) {
$queryStr .= " OR " . $fieldName . " LIKE :" . $fieldName ;
}
$queryStr .= " LIMIT 1";