PHP MySQL PDO - 多个在哪里和或

时间:2018-03-10 21:15:26

标签: php mysql

我正在尝试显示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的初学者,我无法弄明白......

请您告诉我有什么问题/在哪里修理它?

我感谢你的帮助。

感谢您的时间。

1 个答案:

答案 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);