PHP MySQL查询中存在多个条件


PHP MySQL multiple conditions in query

我有一个数据库,里面有一些记录和列:"type"、"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)."')

这个条件很好,但第二个条件不行。起初,我认为问题出在列类型上——两个数组都包含字符串,"type"列是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)

它仍然失败。

第2版:

其实忘了,我是个白痴。我把变量搞混了。。。

您不需要转义整数变量:

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

您应该在mysql工作台中尝试这个查询,或者至少做一个echo $result, "'n";,看看它能提供什么。

当查询不起作用时,我会说默认行为:首先在Mysql Workbench(或任何SQL运行程序,如Toad、Squirrel…)中

$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包含无效字符,则会出现错误。

[edit]顺便说一下,如果$typearray$idarray可能包含无效字符,可以使用array_map和mysqli_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");