MySQL - WHERE子句中的自定义错误

时间:2013-07-24 15:58:44

标签: php mysql clause

我正在开发一个带有MySQL数据库连接的PHP脚本。我遇到的问题是我的查询必须进行优化,因为我处理了大量信息,为了做到这一点,我正在进行大量查询。

要写一个例子,我不会写一个大的查询,而是一个让你能够看到我需要的东西:

SELECT db1.name, db1.pass, db1.user_id, db2.datetime, db2.user_id 
FROM database1 db1, database2 db2 
WHERE db1.name = 'name' 
AND db1.pass = 'pass' 
AND db1.user_id = db2.user_id

我需要知道查询是否失败,因为名称和传递不正确,或者因为两个表中的user_id不相等。

基本上,我需要在查询中返回错误编号或类似的内容,以便能够识别查询中的错误并输出自定义消息: “您的用户和密码不正确。” 要么 “您在database2中没有权限。”

提前致谢!

1 个答案:

答案 0 :(得分:1)

当没有返回任何行因为不满足特定谓词时,SQL SELECT语句不会返回“错误号”或“错误消息”。

(通过“查询失败”和“查询中的错误”,我假设您指的是查询不返回任何行,因为谓词不满意(即任何行是否“匹配”WHERE子句),而不是实际的MySQL错误。)

考虑到问题中的示例查询,可以重写,以进行此类检查。

例如:

SELECT IF(db1.name IS NULL
         ,'Your user and password are incorrect.'
         ,IF(db2.user_id IS NULL
           ,'You don''t have permissions in database2.'
           ,''
       ) AS message
     , db1.name
     , db1.pass
     , db1.user_id
     , db2.datetime
     , db2.user_id 
  FROM (SELECT 1 AS i) i
  LEFT
  JOIN database1 db1
    ON db1.name = 'name' 
   AND db1.pass = 'pass' 
  LEFT
  JOIN database2 db2
    ON db1.user_id = db2.user_id

但你可以写这样一个陈述的事实并不意味着这是一个好方法。 (这种反模式必须有一些名称。)