有没有办法区分MySQL在错误地形成查询时返回的错误消息VS错误地输入用户输入?
例如:
//WRONG QUERY
try {
INSERT into table_name ('clm1','clm2') values('val1','val2'); //BAD query
}
catch (PDOException $e) {
echo $e->getMessage(); //display the error message returned
}
VS
//wrong user input
try {
INSERT INTO table_name ('unique_clm1') value('duplicate_value_from_user');
}
catch (PDOException $e) {
echo $e->getMessage(); //display the error message returned
}
原因:
如果开发人员编写的查询中存在错误;错误需要显示为用于调试的原始MySQL错误......而错误的用户条目需要作为错误消息显示给用户而不会中断正常的代码流.......
答案 0 :(得分:1)
您有几个选择:
<强> 1。使用INSERT IGNORE
使用IGNORE意味着查询不会在重复键上失败。因此失败意味着查询中存在问题。 要知道是否存在重复,您只需要获取受影响的行数。 0表示未插入任何内容(因此存在重复值)。 1表示插入了一行。
<强> 2。使用测试来捕获错误的查询
代码中的错误查询会在修复之前保持不变。对于某些用户来说,它们是不行的,然后对其他用户不好。 因此,如果您有一些测试,测试将捕获BUGS,而代码中的错误处理将捕获“出错”,可能是重复条目,数据库连接等。
第3。阅读错误消息
在您的代码中,您可以阅读$ e的内容,并据此处理。如果$ e包含duplicate key
或相关的错误代码,请通知用户。
否则将错误记录为其他内容(不一定是错误的查询 - 数据库连接是运行时可能出现的错误的另一个好例子。)