@@ -1113,45 +1113,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam
11131113static int mysqli_begin_transaction_libmysql (MYSQL * conn , const unsigned int mode , const char * const name )
11141114{
11151115 int ret ;
1116- zend_bool err = FALSE;
11171116 smart_str tmp_str = {0 };
1117+ char * name_esc ;
1118+ char * query ;
1119+ unsigned int query_len ;
11181120 if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT ) {
11191121 if (tmp_str .s ) {
11201122 smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
11211123 }
11221124 smart_str_appendl (& tmp_str , "WITH CONSISTENT SNAPSHOT" , sizeof ("WITH CONSISTENT SNAPSHOT" ) - 1 );
11231125 }
1124- if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY )) {
1125- if (mysql_get_server_version (conn ) < 50605L ) {
1126- php_error_docref (NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
1127- err = TRUE;
1128- } else if (mode & TRANS_START_READ_WRITE ) {
1129- if (tmp_str .s ) {
1130- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1131- }
1132- smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1133- } else if (mode & TRANS_START_READ_ONLY ) {
1134- if (tmp_str .s ) {
1135- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1136- }
1137- smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
1126+ if (mode & TRANS_START_READ_WRITE ) {
1127+ if (tmp_str .s ) {
1128+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
11381129 }
1130+ smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1131+ } else if (mode & TRANS_START_READ_ONLY ) {
1132+ if (tmp_str .s ) {
1133+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1134+ }
1135+ smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
11391136 }
11401137 smart_str_0 (& tmp_str );
11411138
1142- if (err == FALSE){
1143- char * name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1144- char * query ;
1145- unsigned int query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1146- name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
1139+ name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1140+ query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1141+ name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
11471142
1148- smart_str_free (& tmp_str );
1149- if (name_esc ) {
1150- efree (name_esc );
1151- }
1143+ smart_str_free (& tmp_str );
1144+ if (name_esc ) {
1145+ efree (name_esc );
1146+ }
1147+
1148+ ret = mysql_real_query (conn , query , query_len );
1149+ efree (query );
11521150
1153- ret = mysql_real_query ( conn , query , query_len );
1154- efree ( query );
1151+ if ( ret && mode & ( TRANS_START_READ_WRITE | TRANS_START_READ_ONLY ) && mysql_errno ( conn ) == 1064 ) {
1152+ php_error_docref ( NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
11551153 }
11561154 return ret ;
11571155}
0 commit comments