2013-03-19 88 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')