0

我正在开发一个带有 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 中没有权限。”

提前致谢!

4

1 回答 1

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

但是你可以写出这样的声明并不意味着这是一个好方法。(这个反模式必须有一些名字。)

于 2013-07-24T16:18:51.260 回答