dsh1102 2019-01-18 18:09
浏览 304
已采纳

从数据库过滤信息时,SQL查询忽略WHERE条件

The following section of code is used to to filter data from an html page in real time from an SQL database using ajax. For some reason the condition in the SQL statement ignores the following condition samples_database.sample_storage != 'discarded' but it works in the second part of the else statement.

if(isset($_POST["query"])) {
    $search = mysqli_real_escape_string($conn, $_POST["query"]);
    $query .= "
    SELECT * FROM samples_database JOIN storage_database on samples_database.storage_location=storage_database.id
    WHERE samples_database.sample_storage != 'discarded'
    AND samples_database.env_sam_id LIKE '%".$search."%'
    OR samples_database.c_sam_id LIKE '%".$search."%' 
    OR samples_database.sample_type LIKE '%".$search."%' 
    OR storage_database.storage_name LIKE '%".$search."%'
    ORDER BY samples_database.env_sam_id;";
} else {
    $query .= "
    SELECT * FROM samples_database JOIN storage_database on samples_database.storage_location=storage_database.id WHERE sample_storage != 'discarded' ORDER BY samples_database.env_sam_id;";
}

Can anybody help me this this silly problem please?

  • 写回答

2条回答 默认 最新

  • douyan8267 2019-01-18 18:14
    关注

    There's an order of precedence: AND is calculated before OR:

    if(isset($_POST["query"])) {
        $search = mysqli_real_escape_string($conn, $_POST["query"]);
        $query .= "
        SELECT * FROM samples_database JOIN storage_database on samples_database.storage_location=storage_database.id
        WHERE samples_database.sample_storage != 'discarded'
        AND (samples_database.env_sam_id LIKE '%".$search."%' OR
             samples_database.c_sam_id LIKE '%".$search."%' OR
             samples_database.sample_type LIKE '%".$search."%' OR 
             storage_database.storage_name LIKE '%".$search."%')
        ORDER BY samples_database.env_sam_id;";
    } else {
        $query .= "
        SELECT * FROM samples_database JOIN storage_database on samples_database.storage_location=storage_database.id WHERE sample_storage != 'discarded' ORDER BY samples_database.env_sam_id;";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 bywave配置文件写入失败
  • ¥20 基于Simulink的ZPW2000轨道电路仿真
  • ¥15 pycharm找不到在环境装好的opencv-python
  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解