我正在尝试显示“删除”(字段名称)为“否”(值)和多个搜索关键字。
所以它只在“删除”字段上显示值为“否”。 但不知何故,它仍然显示所有数据,包括“删除”字段上的"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_info
的 bindValue()
中删除“%”,因为它不是类似的条件:
$pdo_statement->bindValue(':remove_info', $remove_info, PDO::PARAM_STR);
关于PHP MySQL PDO - 多个 WHERE AND OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214104/