是否有办法区分MySQL在查询形成错误时与用户输入错误时返回的错误消息?
例如://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
}
与
//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错误,以便调试......而错误的用户条目需要作为错误消息显示给用户,而不中断正常的代码流.....
您有几个选择:
1。使用INSERT IGNORE
使用IGNORE表示查询在重复键上不会失败。因此,失败意味着查询中存在问题。要知道是否存在重复,只需获得受影响的行数。0表示没有插入任何内容(因此存在重复的值)。1表示插入了一行
2。使用测试捕获错误查询
代码中的错误查询在修复之前一直是错误的。它们不会对一些用户是好的,然后对另一些用户就变坏了。因此,如果你有一些测试,测试将捕获bug,而代码中的错误处理将捕获"出错",可能是重复条目,数据库连接等。
3。读取错误信息
在代码中,可以读取$e的内容,并进行相应的处理。如果$e包含duplicate key
或相应的错误码,则通知用户。否则,将错误记录为其他错误(不一定是糟糕的查询- DB连接是另一个很好的例子,可以在运行时出现错误)。