【问题标题】:MySQL error code needed需要 MySQL 错误代码
【发布时间】:2013-03-08 17:56:33
【问题描述】:

即使数据与查询不匹配,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 语句错误,此查询也始终返回结果。

【问题讨论】:

  • 这个 SQL 查询嵌入在什么语言中? PHP、Perl、C#、Java、...?
  • 我为此使用 PHP ...

标签: php mysql error-handling http-status-code-404


【解决方案1】:

是的,这就是 SQL 的工作方式。如果没有与您的查询匹配的行,则结果集将为空。这是嵌入 SQL 查询以响应“无行”情况并更改响应状态(更改为 404 或您有什么)的程序的工作(用 PHP 编写或您有什么)。 SQL 查询不对 HTTP 状态代码负责——它是粉笔和奶酪。

【讨论】:

  • 感谢您的快速回复。我知道 MYSQL 不负责我的 HTTP 标头代码,但是上面的这个查询总是发送一个结果.. 不是 NULL 行,而是一个“真实”的结果
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多