SQL查询返回错误的结果

时间:2015-07-31 13:32:33

标签: php mysql

在我的文件顶部,我检查了$clientid使用echo $clientid的内容。这与731相呼应。

在脚本的下方我运行此查询:

$active_ts = db_select("SELECT * FROM `timesheets` WHERE clientid='".$clientid."' AND status=\"client\" OR status=\"cand\"");
var_dump($active_ts); 

我期望发生的事情只是选择clientid为731的时间表。

var_dump显示的是["clientid"]=> string(3) "345"["clientid"]=> string(3) "712",["坦诚"] => string(3)" 730"和["clientid"]=> string(3) "721"

我真的不知道如何进一步调试......

2 个答案:

答案 0 :(得分:4)

这是您的查询:

SELECT *
FROM `timesheets`
WHERE clientid = '".$clientid."' AND status = 'client' OR status = 'cand'

WHERE子句没有括号。它被解释为:

WHERE (clientid = '".$clientid."' AND status = 'client') OR status = 'cand'

这可能不是你想要的。我建议你使用IN

WHERE clientid = '".$clientid."' AND status  IN ('client', 'cand')

答案 1 :(得分:3)

因为查询选择了status = cand的用户。

您需要更改查询:

更改:

$active_ts = db_select('
    SELECT * FROM `timesheets` 
    WHERE clientid='.$clientid.' AND (status="client" OR status="cand")
');

我认为你'之间不需要clientid,因为它是int。