我搞砸了我的where条款吗?获得意想不到的结果


Did I mess up my where clause? Getting unexpected results

$active_sth = $dbh->prepare("SELECT * FROM user_campaign 
    WHERE status='blasting' 
    OR status='ready' 
    OR status='followup_hold' 
    OR status='initial_hold' 
    AND uid=:uid 
    ORDER BY status ASC");
$active_sth->bindParam(':uid', $_SESSION['uid']['id']);
$active_sth->execute();

我是正数 $_SESSION['uid']['id'] = 7但它也会提取 ID 10 或任何其他数字的结果。

我的 AND/OR 条款写错了吗?

是的,查询是错误的

SELECT * FROM user_campaign 
WHERE (
    status='blasting' 
    OR status='ready' 
    OR status='followup_hold' 
    OR status='initial_hold'
)
AND uid=:uid 
ORDER BY status ASC

您必须对所有OR进行分组以确保该行具有此值之一,并单独检查它是否给出了uid

正确的写法是:

SELECT * FROM user_campaign 
WHERE status IN ('blasting', 'ready', 'followup_hold', 'initial_hold')
AND uid =: uid 
ORDER BY status ASC

你应该使用IN而不是大量的OR:)