@@ -1086,45 +1086,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam
1086
1086
static int mysqli_begin_transaction_libmysql (MYSQL * conn , const unsigned int mode , const char * const name )
1087
1087
{
1088
1088
int ret ;
1089
- zend_bool err = FALSE;
1090
1089
smart_str tmp_str = {0 };
1090
+ char * name_esc ;
1091
+ char * query ;
1092
+ unsigned int query_len ;
1091
1093
if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT ) {
1092
1094
if (tmp_str .s ) {
1093
1095
smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1094
1096
}
1095
1097
smart_str_appendl (& tmp_str , "WITH CONSISTENT SNAPSHOT" , sizeof ("WITH CONSISTENT SNAPSHOT" ) - 1 );
1096
1098
}
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 );
1111
1102
}
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 );
1112
1109
}
1113
1110
smart_str_0 (& tmp_str );
1114
1111
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 ):"" );
1120
1115
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 );
1125
1123
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" );
1128
1126
}
1129
1127
return ret ;
1130
1128
}
0 commit comments