@@ -1086,45 +1086,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam
10861086static int mysqli_begin_transaction_libmysql (MYSQL * conn , const unsigned int mode , const char * const name )
10871087{
10881088 int ret ;
1089- zend_bool err = FALSE;
10901089 smart_str tmp_str = {0 };
1090+ char * name_esc ;
1091+ char * query ;
1092+ unsigned int query_len ;
10911093 if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT ) {
10921094 if (tmp_str .s ) {
10931095 smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
10941096 }
10951097 smart_str_appendl (& tmp_str , "WITH CONSISTENT SNAPSHOT" , sizeof ("WITH CONSISTENT SNAPSHOT" ) - 1 );
10961098 }
1097- if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY )) {
1098- if (mysql_get_server_version (conn ) < 50605L ) {
1099- php_error_docref (NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
1100- err = TRUE;
1101- } else if (mode & TRANS_START_READ_WRITE ) {
1102- if (tmp_str .s ) {
1103- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1104- }
1105- smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1106- } else if (mode & TRANS_START_READ_ONLY ) {
1107- if (tmp_str .s ) {
1108- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1109- }
1110- smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
1099+ if (mode & TRANS_START_READ_WRITE ) {
1100+ if (tmp_str .s ) {
1101+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
11111102 }
1103+ smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1104+ } else if (mode & TRANS_START_READ_ONLY ) {
1105+ if (tmp_str .s ) {
1106+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1107+ }
1108+ smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
11121109 }
11131110 smart_str_0 (& tmp_str );
11141111
1115- if (err == FALSE){
1116- char * name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1117- char * query ;
1118- unsigned int query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1119- name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
1112+ name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1113+ query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1114+ name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
11201115
1121- smart_str_free (& tmp_str );
1122- if (name_esc ) {
1123- efree (name_esc );
1124- }
1116+ smart_str_free (& tmp_str );
1117+ if (name_esc ) {
1118+ efree (name_esc );
1119+ }
1120+
1121+ ret = mysql_real_query (conn , query , query_len );
1122+ efree (query );
11251123
1126- ret = mysql_real_query ( conn , query , query_len );
1127- efree ( query );
1124+ if ( ret && mode & ( TRANS_START_READ_WRITE | TRANS_START_READ_ONLY ) && mysql_errno ( conn ) == 1064 ) {
1125+ php_error_docref ( NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
11281126 }
11291127 return ret ;
11301128}
0 commit comments