gpt4 book ai didi

PHP MySQL PDO - 多个 WHERE AND OR

转载 作者:行者123 更新时间:2023-11-29 06:46:28 25 4
gpt4 key购买 nike

我正在尝试显示“删除”(字段名称)为“否”(值)和多个搜索关键字。

所以它只在“删除”字段上显示值为“否”。但不知何故,它仍然显示所有数据,包括“删除”字段上的"is"。

这是我的代码......

$remove_info = 'No';

$search_keyword = '';
if(!empty($_POST['search']['keyword'])) {
$search_keyword = $_POST['search']['keyword'];
}

$sql = "SELECT *
FROM $table2
WHERE `remove` = :remove_info
AND `name_first` LIKE :keyword1
OR `name_last` LIKE :keyword2
OR `birth_date` LIKE :keyword3
ORDER BY `fID` DESC ";


// $limit -- is in pagination code ...


try {
$query = $sql.$limit;
$pdo_statement = $db->prepare($query);
$pdo_statement->bindValue(':remove_info', '%' . $remove_info . '%', PDO::PARAM_STR);
$pdo_statement->bindValue(':keyword1', '%' . $search_keyword . '%', PDO::PARAM_STR);
$pdo_statement->bindValue(':keyword2', '%' . $search_keyword . '%', PDO::PARAM_STR);
$pdo_statement->bindValue(':keyword3', '%' . $search_keyword . '%', PDO::PARAM_STR);
$pdo_statement->execute();
$result = $pdo_statement->fetchAll();

} catch (PDOException $e) {
echo "Error : Check your error message.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

我还是 PDO 的初学者,我不明白......

您能告诉我出了什么问题/在哪里修复吗?

感谢您的帮助。

感谢您的宝贵时间。

最佳答案

您必须将 OR 条件用方括号括起来:

SELECT * 
FROM $table2
WHERE `remove` = :remove_info AND
(`name_first` LIKE :keyword1
OR `name_last` LIKE :keyword2
OR `birth_date` LIKE :keyword3)
ORDER BY `fID` DESC

因为 AND 优先于 OR 并且您的初始查询如下所示:

(`remove` = :remove_info AND `name_first` LIKE :keyword1) OR ...

此外,正如 @Toleo 所指出的(请参阅下面的评论,谢谢!),您应该在 :remove_infobindValue() 中删除“%”,因为它不是类似的条件:

$pdo_statement->bindValue(':remove_info', $remove_info, PDO::PARAM_STR);

关于PHP MySQL PDO - 多个 WHERE AND OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com