2013-07-15 87 views
1

我的數據庫代碼是MYSQL UPDATE

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE 'Username'='Hamburger7' 

沒有條目,其中用戶名是等於Hamburger7,但無論如何選擇兩個條目。它不是選擇符合條件的條目,而是選擇等於'0'(與NULL相反)的條目。

我的PHP管理頁面,上的輸出,其中的服務器設置爲:

SELECT `Title` , `Rating` , `Times_Played` 
FROM audio 
WHERE `Username` = 'Hamburger7' 
LIMIT 0 , 30 
+0

你爲什麼要使用SELECT語句執行**更新**? –

+1

btw'Username'='Hamburger7'總是失敗,因爲**你正在比較兩個不同的常量**(字符串),你應該比較一個字段和常量。 –

回答

2

我覺得問題是你在查詢中有單引號的Username,這意味着你把MySQL看作是一個文字字符串而不是列名。

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE 'Username'='Hamburger7' 

將其更改爲

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE `Username`='Hamburger7' 

或者更好的

SELECT Title,Rating,Times_Played from audio WHERE Username='Hamburger7' 

因爲你,除非列名是保留字並不需要把反引號列名,並且使您的列名與保留字相同是一個糟糕的想法。

+1

這很有道理。但是,當改變它時,它不起作用。相反,它回顧了'Username'等於0的每個條目。 – JVE999

+0

然後,您在原始條目中發佈的內容不是您正在運行的代碼。請仔細檢查它,甚至可以使用當前代碼的剪切和粘貼以及您所取得的進展更新原始問題。 –

+0

是的,你是對的。我發現問題在於用戶名字段被設置爲INT,而不是VARCHAR。謝謝你確認這一點。它幫助我認同什麼不是問題。對此,我真的非常感激。 – JVE999

2
SELECT `Title`,`Rating`,`Times_Played` from audio WHERE `Username`='Hamburger7' 

你比較字符串用戶名字符串Hamburger7不是列名

+0

當用反引號括起來時,'用戶名'將被解釋爲一個標識符。鑑於該語句沒有拋出異常,它可能是'audio'表中列的名稱。 – spencer7593

1

Username列的數據類型是數字類型,可能是INT。但絕對不是CHAR或VARCHAR。

MySQL正在將您的字符串字面值'Hamburger7'轉換爲與列匹配的數據類型。然後根據INT轉換爲0。

您的查詢實際上是:

WHERE `Username` = convert_string_literal_to_integer('Hamburger7') 

這相當於

WHERE `Username` = 0 

(呵呵方便,隱式數據類型轉換的樂趣!)

+0

偉大的洞察力! – JVE999