2013-03-19 89 views
0

即使數據與查詢不匹配,MySQL也會始終發送「默認響應」!需要MySQL錯誤代碼

如果沒有數據與查詢匹配,如何設計我的查詢以從MySQL獲取錯誤代碼?

我需要MySQL的錯誤代碼來創建404或410頁面。

SELECT 
place.ID AS id, 
place.latitude AS lat, 
place.longitude AS lng, 

IF(
place.translationID IS NULL, 
place.name, 
placel10n.text 
) AS cityname, 

IF(
admcode.translationID IS NULL, 
'', 
statel10n.text 
) AS statename, 

IF ( 
countrycode.translationID IS NULL, 
countrycode.name, 
countryl10n.Text 
) AS countryname, 

IF(
place.textID IS NULL, 
'', 
`l10n-strings`.text 
) AS description 

FROM 
places AS place 

LEFT JOIN `l10n-strings` AS placel10n ON (place.translationID = placel10n.translationID   AND placel10n.languageCode = 'de') 
LEFT JOIN admin1codesascii AS admcode ON (place.admin1 = admcode.statecode AND  place.country = admcode.country) 
LEFT JOIN `l10n-strings` AS statel10n ON (admcode.translationID = statel10n.translationID AND statel10n.languageCode = 'de') 
LEFT JOIN countries AS countrycode ON (place.country = countrycode.iso_alpha2) 
LEFT JOIN `l10n-strings` AS countryl10n ON (countrycode.translationID = countryl10n.TranslationID AND countryl10n.LanguageCode = 'de') 

LEFT JOIN texts ON (place.textID = texts.id) 
LEFT JOIN `l10n-strings` ON (texts.translationID = `l10n-strings`.translationID AND `l10n-strings`.languageCode= 'de') 

WHERE 
place.id = '8' 
AND 
place.featurecode = 'A' 
OR 
place.featurecode = 'AB' 
OR 
place.featurecode = 'AAC' 

LIMIT 0,1 

即使where語句錯誤,此查詢總是返回結果。

+0

此SQL查詢嵌入在哪種語言中? PHP,Perl,C#,Java,...? – 2013-03-19 20:54:25

+0

我使用PHP ... – Bob 2013-03-19 20:58:42

回答

0

是的,這就是SQL的工作方式。如果沒有與您的查詢匹配的行,則結果集將爲空。這是程序的工作(用PHP編寫或你有什麼),其中嵌入了SQL查詢來響應「無行」情況並將響應狀態(404或你有什麼)改變。 SQL查詢不負責HTTP狀態碼 - 它是粉筆和奶酪。

+0

感謝您的快速響應。我知道MYSQL不是我的HTTP頭代碼負責,但是這個站在上面的查詢總是發送一個結果..不是NULL行,但有一個「真實」結果 – Bob 2013-03-19 20:55:22

0

在MySQL中,AND has higher operator precedence than OR,讓您的WHERE子句中的條件將被解釋爲

(place.id = '8' AND place.featurecode = 'A') OR 
place.featurecode = 'AB' OR 
place.featurecode = 'AAC' 

使用括號要明確有關操作的你打算順序。也許你的意思是?

place.id = '8' AND 
    (place.featurecode = 'A' OR 
    place.featurecode = 'AB' OR 
    place.featurecode = 'AAC')