2011-11-23 70 views
0

好吧,我有一個相當長的查詢,只有當我添加一個IN語句時失敗。以下查詢直接在MySQL控制檯中工作良好,但在PHP中完成時不返回任何內容。PHP MySQL不支持IN嗎?

$db = mysql_connect('localhost', 'something', 'somepassword'); 

$query = "SELECT * 
FROM alt_table f 
INNER JOIN alt_fac_table_c cl ON (f.id = cl.alt_table2_ida) 
INNER JOIN alt_table c ON (cl.alt_table_idb = c.id) 
LEFT OUTER JOIN alt_table_contacts_c con ON (f.id = con.alt_table_ida) 
LEFT OUTER JOIN contacts cc ON (con.alt_table_idb = cc.id) 
WHERE c.name = 'myname' 
AND f.state IN ('AL','FL') ORDER BY fname;"; 

$result = mysql_query($query); 

問題不在於與數據庫連接,而在於與查詢本身無關。很明顯,我已經重新命名了一些東西,但查詢是一樣的。在PHP中,它不會返回任何內容(沒有錯誤,沒有任何內容),但在SSH /控制檯中它將返回我需要的所有行。如果我刪除「AND f.state IN('AL','FL')ORDER BY fname;」;「查詢的作品,但給我的每一個國家。因此,最大的問題是... PHP是否有IN語句有問題嗎?

UPDATE FIX 它最終成爲了發佈數據的問題,我發佈了'AL',FL'的單引號,它顯然是在發佈後奇怪地編碼它們。某種形式的安全功能。我把帖出來後,並加入它,它的服務器端PHP替代和它的作品。

+5

無論您使用哪種編程語言與MySQL進行交互,MySQL都是MySQL。 – BoltClock

+0

討厭是粗魯的,但根本無濟於事,因爲當在shell中直接查詢數據庫時,這個確切的語句可以工作。 – Tyler

回答

0

它最終成爲發佈數據的問題。我發佈了'AL',FL'的單引號。這顯然是在郵政編碼他們奇怪。我假設某種安全功能。我從帖子中拿出了引用,並將其添加到了服務器端PHP中,並且它可以正常工作。

6

你忘記了選擇一個數據庫...

mysql_select_db('database_name', $db); 

這應該在撥打mysql_connect()函數之後進行。

http://uk.php.net/mysql_select_db

它將提供成功真/假,所以你可以使用以下方法來確保它連接。

if(! mysql_select_db('database_name', $db)) { 
    die('failed to select database'); 
} 

除了上面,你可以修改下面一行

$result = mysql_query($query); 

更像以下。這將顯示您返回任何錯誤,並在你的情況下,No database selected錯誤

$result = mysql_query($query) or die(mysql_error()); 
+1

另一篇文章(從那以後被刪除)也提出了一個很好的觀點 - 擺脫查詢中的分號,因爲它不需要在那裏。 – Crontab

+0

的確,它並不需要在那裏。但是,在這種情況下,它不會造成任何傷害,因爲它在查詢結束時。 –

+0

不是問題。我只是忽略了在上面的代碼片段中提供該行。看到我的評論,我說它在IN語句中正常工作。 – Tyler