@@ -42,23 +42,32 @@ static int dblib_fetch_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info)
42
42
pdo_dblib_stmt * S = NULL ;
43
43
char * message ;
44
44
char * msg ;
45
+ int is_general_message = 0 ;
45
46
46
47
if (stmt ) {
47
48
S = (pdo_dblib_stmt * )stmt -> driver_data ;
48
49
einfo = & S -> err ;
49
50
}
50
51
51
- if (einfo -> dberr == SYBESMSG && einfo -> lastmsg ) {
52
+ // use severity to determine whether a message is "general"
53
+ // Severity Levels 11 through 16
54
+ // These messages indicate errors that can be corrected by the user.
55
+ // https://technet.microsoft.com/en-us/library/aa937483%28v=sql.80%29.aspx
56
+ if (einfo -> severity && einfo -> severity >= 11 && einfo -> severity <= 16 ) {
57
+ is_general_message = 1 ;
58
+ }
59
+
60
+ if (is_general_message && einfo -> lastmsg ) {
52
61
msg = einfo -> lastmsg ;
53
- } else if (einfo -> dberr == SYBESMSG && DBLIB_G (err ).lastmsg ) {
62
+ } else if (is_general_message && DBLIB_G (err ).lastmsg ) {
54
63
msg = DBLIB_G (err ).lastmsg ;
55
64
DBLIB_G (err ).lastmsg = NULL ;
56
65
} else {
57
66
msg = einfo -> dberrstr ;
58
67
}
59
68
60
69
spprintf (& message , 0 , "%s [%d] (severity %d) [%s]" ,
61
- msg , einfo -> dberr , einfo -> severity , stmt ? stmt -> active_query_string : "" );
70
+ msg , einfo -> dberr , einfo -> severity , ( stmt && stmt -> active_query_string ) ? stmt -> active_query_string : "" );
62
71
63
72
add_next_index_long (info , einfo -> dberr );
64
73
add_next_index_string (info , message );
0 commit comments