2013-03-19 8 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, ...? –

+0

Я использую PHP для этого ... – Bob

ответ

0

Да, так работает SQL. Если нет строк, соответствующих вашему запросу, набор результатов будет пустым. Это работа программы (написанная на PHP или у вас есть), в которой встроен ваш SQL-запрос, чтобы ответить на случай «нет строк» ​​и изменить статус ответа (до 404 или что у вас есть). SQL-запросы не отвечают за коды статуса HTTP - это мел и сыр.

+0

Спасибо за ваш быстрый ответ. Я знаю, что MYSQL не отвечает за мои коды HTTP-заголовков, но этот запрос, стоящий выше, всегда посылает результат .. не NULL строк, а с «реальным» результатом – Bob

0

В MySQL, AND has higher operator precedence than OR, поэтому условия в вашем ИНЕКЕ будет интерпретироваться как

(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')