2014-09-22 249 views
0

我有一個包含一些記錄和列的數據庫:「type」,「id」等。我想選擇數組$ typearray中提到的任何「類型」的所有記錄,但沒有記錄哪些id在$ idarray中。我試着這樣做:查詢PHP MySQL多個條件

$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)."') 

條件工作正常,但第二次卻沒有。起初,我認爲問題是與列類型 - 兩個數組包含字符串,「類型」列是一個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:

其實忘記它。我是個白癡。我已經混合了我的變量...

+1

在執行它之前只是'var_dump'查詢。那麼你可以看到出了什麼問題。 :) – mithunsatheesh 2014-09-22 13:17:08

+1

給查詢如何形成? – Tushar 2014-09-22 13:19:00

+0

MySQL並不關心你是否將整數放入引號或不是。是'$ idarray'真的是一個數組?在'$ result'行之前,把'assert(is_array($ typearray));斷言(is_array($ idarray));'。 – DanFromGermany 2014-09-22 13:22:18

回答

0

你應該試試這個查詢,或者至少做一個echo $result, "\n";到mysql工作臺,看看它給了什麼。

然後我說:有默認的行爲時,查詢不工作:先在MySQL工作臺(或任何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 5月包含無效字符,你可以使用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"); 
0

你不需要逃避整型變量:

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