首页 > 解决方案 > 如何限制 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();
}
}

标签: phpmysql

解决方案


可以添加LIMIT 1到末尾$queryStr

$queryStr = "SELECT * FROM `Demo_Guests` WHERE 0";
foreach (array_keys($searchFields) as $fieldName) {
    $queryStr .= " OR " . $fieldName . " LIKE :" . $fieldName ;
}
$queryStr .= " LIMIT 1";

推荐阅读