我正在尝试显示WHERE"删除"(字段名称)是"否"(值)和多个搜索关键字。
所以它只显示价值是"否"在"删除"领域。 但不知何故,它仍然显示所有数据包括"是"在"删除"字段。
这是我的代码......
$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的初学者,我无法弄明白......
请您告诉我有什么问题/在哪里修理它?
我感谢你的帮助。
感谢您的时间。
答案 0 :(得分:2)
您必须用括号括起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指出的那样(请参阅下面的评论,谢谢!),您应该删除bindValue()
:remove_info
中的'%',因为它不是类似条件:
$pdo_statement->bindValue(':remove_info', $remove_info, PDO::PARAM_STR);