PHP MySQL PDO - 多个 WHERE AND OR

标签 php mysql

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

所以它只在“删除”字段上显示值为“否”。 但不知何故,它仍然显示所有数据,包括“删除”字段上的"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/

相关文章:

php - javascript或php数组交差法

javascript - HTML 连接 img 标签内的跨度

php - 如何在数据模型中处理用户组和单个用户

MySQL distinct查询返回有重复信息的行,需要去重

php - php和javascript之间共享访问限制

php - YouTube API v3 使用 PHP 获取用户名的最新视频上传

php - 带有自签名证书的 Telegram bot webhook 无法正常工作

mysql 查询 : null values behavior when left joining

php - 更新到 v4.8.0 后 phpMyAdmin 出错 : The $cfg ['TempDir' ] (./tmp/) 无法访问

Php Mysql SELECT 查询 1 列等于 1 个变量