php - MySQL rollback in handler -


i have stored procedure i'd rollback in case goes wrong. in order i'm using exit handler this:

declare exit handler sqlexception      begin         rollback;     end; 

but in way, when call stored procedure, in case of errors, stored procedure succeed , don't know actual problem. want client (php) log error in order troubleshoot it. modify in way:

declare exit handler sqlexception      begin         diagnostics condition 1               @p1 = message_text;         rollback;         signal sqlstate '45000' set message_text = @p1;     end; 

so stored procedure rollback , throw exeption handler intercepted. that's cool message_text more 128 chars , in such cases get:

error code: 1648. data long condition item 'message_text'

of course solution not acceptable:

declare exit handler sqlexception      begin         diagnostics condition 1               @p1 = message_text;         rollback;         set @p1=substring(@p1,1,128);         signal sqlstate '45000' set message_text = @p1;     end; 

is there way intercept exception, rollback , throw same exception client? help

i use template , works me. when exceptions encountered, transaction flow jumps declare exit handler sqlexception. last statement executed mysql engine rollback. after that, transaction flow moves out of tblock

handle exceptions gracefully returning error codes , message recordset (not throwing error php), php code can manipulate , display.

delimiter $$ create procedure `procname`( <parameters here> ) begin      start transaction;      tblock: begin # start: transaction block          /* catch exceptions, rollback */         declare exit handler sqlexception         begin             diagnostics condition 1                 @state = returned_sqlstate,                  @rtc    = mysql_errno,                 @rmg    = message_text; -- mysql 5.6 > : comment diagnostics lower versions             rollback;         end;          /* table transactions here */          commit;      end tblock; # end: transaction block      select  @rtc retcode,             @rmg retmsg,             'some ret value' retval;  end$$ delimiter ; 

in sql, standard, 0 success , non-zero (usually greater zero) values suggest error. may want follow such , make practice.


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -