2011-09-13 35 views
2
SELECT  * 
FROM   `enzymes` 
    INNER JOIN `compounds` 
    ON   compounds.compound_id = enzymes.compound_id 
WHERE  `ec` LIKE '1.11%' 

它在phpmyadmin和mysql工作臺中工作。爲什麼以下SQL命令不適用於PHP中的mysql_query?

無論我是否反向使用mysql_real_escape_string並在適當的位置添加數據庫名稱,它都不起作用。 phpmyadmin php代碼也不起作用。

ERRORS警告:mysql_fetch_assoc()預計參數1是資源,在布爾....

相同的錯誤給出了所有其他查詢的資源有關的功能

UPD

case 'ec': 
    $dbl = mysql_connect(DB_ADDRESS, DB_USER, DB_PASSWORD); 
    mysql_select_db("kegg", $dbl); 
    //a)connection is fine 
    //b)tried with explicitly providing the db name vs with pre-selection 
    $sql = "SELECT * FROM enzymes INNER JOIN `compounds` ON compounds.compound_id=enzymes.compound_id"; 
    print_r($sql); 
    $result = mysql_query($sql, $dbl); 
    print mysql_error ($dbl); 
    while ($row = mysql_fetch_assoc($result)) { 
     print_r($row) 
     $items[ $row['name'] ] = $row['compound_id'];   
    } 

,,,

解決方案:謝謝大家, - 布拉德首先給出了關鍵的答案。

$sql = "SELECT enzymes.*, compounds.*\n" 
. "FROM enzymes\n" 
. " INNER JOIN compounds\n" 
. " ON compounds.compound_id = enzymes.compound_id\n" 
. "WHERE enzymes.ec LIKE '1.11%' LIMIT 0, 30 "; 

最近出現了一個類似的話題,它被指出只有在選擇特定字段時才起作用。當需要所有數據時,至關重要的解決方案是解決含糊不清的問題:

enzymes.*, compounds.* 
+1

它究竟如何「不起作用」?你會得到什麼錯誤? –

+0

加入時,最好使用'table.column'格式引用列(是顯式的),否則可能會遇到問題。 (例如'SELECT enzymes。*','WHERE compounds.ec LIKE'等) –

+0

是'ec'是「酶」還是'compound'的列?如果是這樣,它是一種文本字段(甚至varchar)?如果是數字,「LIKE」將不起作用。 – bfavaretto

回答

1

我的直覺告訴我數據庫被列引用所困惑。當您開始進行連接時,尤其是當您的列名稱可能匹配時,最好明確您正在選擇的內容,比較內容等。

SELECT  enzymes.* 
FROM   enzymes 
    INNER JOIN compounds 
    ON   compounds.compound_id = enzymes.compound_id 
WHERE  counpounds.ec LIKE '1.11%' 

但是,不知道發生真實確切的錯誤, 這隻能是一種猜測

UPDATE

現在,我看到了錯誤,請確保你一個適當的查詢響應測試。當您撥打mysql_query(或任何您使用的)時,請在嘗試獲取結果之前檢查資源是否有故障。大多數連接庫都可以調用* _error或* _last_error方法來查看導致失敗的原因。

+0

謝謝,我這樣做,我通常使用我自己的sql-wrapper庫,它會記錄所有錯誤。我一直在爲此工作> 2小時!重新啓動mysql和apache。 –

2

鑑於該錯誤,mysql_query返回一個布爾值FALSE,指示錯誤。試試這個:

$result = mysql_query(...your query here...) or die(mysql_error()); 

準確地看到錯誤是什麼。

1

查詢在諸如phpMyAdmin等環境中有效的原因有很多,但不是通過PHP的mysql函數。對於初學者,請確保您已經通過PHP的mysql_select_db functiondocs)選擇了合適的數據庫並輸入USE命令。當使用phpMyAdmin時,這將在後臺自動執行,而不是使用PHP腳本。

如果您在查詢中指定了數據庫的名稱,則不需要上一步,如果數據庫名稱發生任何更改,則代碼將更難以維護。

指定表,這樣做:SELECT field1, field2 FROM database_name.table_name WHERE...

第二,如果你正在使用雙或單引號不正確,變量可能不能被解析或其他此類問題:這將導致您的查詢無效。代碼示例將有助於確定是否屬於這種情況。

0

這表明您應該在mysql_query中傳遞mySQL資源。

看看:

resource mysql_query (string $query [, resource $link_identifier ]) 

打開連接時,您將獲得$ link_identifier:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
0

避免色譜柱明確的錯誤在MySQL INNER JOIN。 請嘗試:

SELECT  compounds.compound_id as cid, enzymes.compound_id as eid 
FROM   `enzymes` 
    INNER JOIN `compounds` 
    ON   compounds.compound_id = enzymes.compound_id 
WHERE  `enzymes`.`ec` LIKE '1.11%' 

如果你會得到類似的成對的ID,問題就在這裏。

相關問題