PHP MySQL查询中的多个条件

时间:2014-09-22 13:14:56

标签: php mysql

我有一个包含一些记录和列的数据库:"输入"," id"和别的。我想用任何"类型"选择所有记录。在数组$ typearray中提到但没有记录哪个id在$ idarray中。我试着做类似的事情:

$result = mysql_query("SELECT * FROM db 
    WHERE type IN('".implode("','",$typearray)."') 
    AND id NOT IN('".implode("','",$idarray)."') 
    ORDER BY date DESC LIMIT 10");

但它似乎不起作用 -

type IN('".implode("','",$typearray)."')

条件工作正常,但第二个没有。起初我认为问题出在列类型上 - 两个数组都包含字符串,"类型" column是VARCHAR(10),id是INT,但将其更改为字符串并没有帮助。我做错了什么?

修改

如果我打印一个查询,我会得到这个:

SELECT * FROM db 
WHERE type IN('apple','tomato','potato') 
AND id NOT IN('20','1','10','15','8') 
ORDER BY date DESC LIMIT 10

第一个条件很好:它只选择苹果,西红柿和土豆。第二个条件什么都不做,即使我手动输入:

id NOT IN('20','1','10','15','8')

id NOT IN('20,1,10,15,8')

id NOT IN(20,1,10,15,8)

它仍然失败。

EDIT2:

其实忘记了。我是个白痴。我把我的变量混淆了一下......

2 个答案:

答案 0 :(得分:0)

你应该在mysql工作台上尝试这个查询,或至少做一个echo $result, "\n";来查看它给出的内容。

我会说当查询不起作用时的默认行为:首先在Mysql Workbench中(或任何像Toad,Squirrel这样的SQL运行器......)

$result = mysql_query("SELECT * FROM db 
    WHERE type IN('".implode("','",$typearray)."') 
    AND id NOT IN('".implode("','",$idarray)."') 
    ORDER BY date DESC LIMIT 10");

如果$typearray为空,则表示您正在寻找可能永远不匹配的type IN ('')。 如果$idarray为空,则表示您正在查找可能始终匹配的id not in ('')

如果$typearray$idarray包含无效字符,您将收到错误。

[编辑]顺便说一句,如果$typearray$idarray可能包含无效字符,您可以使用array_mapmysqli_escape_string

$result = mysql_query("SELECT * FROM db 
    WHERE type IN('".implode("','", array_map('mysql_escape_string', $typearray))."') 
    AND id NOT IN('".implode("','", array_map('mysql_escape_string', $idarray))."') 
    ORDER BY date DESC LIMIT 10");

答案 1 :(得分:0)

您不需要转义整数变量:

...
AND id NOT IN(" . implode(",", $idarray).") 
...