我正在开发一个带有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中没有权限。”
提前致谢!
答案 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
但你可以写这样一个陈述的事实并不意味着这是一个好方法。 (这种反模式必须有一些名称。)