簡體   English   中英

PHP MySQL查詢中的多個條件

[英]PHP MySQL multiple conditions in query

我有一個包含一些記錄和列的數據庫:“類型”,“ id”和其他。 我想選擇數組$ typearray中提到的所有帶有“類型”的記錄,但沒有$ idarray中有ID的記錄。 我試圖做類似的事情:

$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,但是將其更改為string並沒有幫助。 我究竟做錯了什么?

編輯:

如果我打印查詢,則會得到以下信息:

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:

其實算了 我是個白痴。 我混合了一些變量...

您應該嘗試此查詢,或者至少執行echo $result, "\\n"; ,進入mysql工作台,看看它能提供什么。

我會說當查詢不起作用時的默認行為:首先在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 ('')中尋找可能總是匹配的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");

您不需要轉義整數變量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM