1
$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 子句写错了吗?

4

2 回答 2

4

是的,查询错误

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

您必须对所有ORs 进行分组以确保该行获得其中一个值,并单独检查它是否已给出uid.

于 2013-10-15T19:42:13.557 回答
3

正确的写法是:

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

您应该使用IN而不是大量的ORs :)

于 2013-10-15T19:44:42.217 回答