@@ -1113,45 +1113,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam
1113
1113
static int mysqli_begin_transaction_libmysql (MYSQL * conn , const unsigned int mode , const char * const name )
1114
1114
{
1115
1115
int ret ;
1116
- zend_bool err = FALSE;
1117
1116
smart_str tmp_str = {0 };
1117
+ char * name_esc ;
1118
+ char * query ;
1119
+ unsigned int query_len ;
1118
1120
if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT ) {
1119
1121
if (tmp_str .s ) {
1120
1122
smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1121
1123
}
1122
1124
smart_str_appendl (& tmp_str , "WITH CONSISTENT SNAPSHOT" , sizeof ("WITH CONSISTENT SNAPSHOT" ) - 1 );
1123
1125
}
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 );
1138
1129
}
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 );
1139
1136
}
1140
1137
smart_str_0 (& tmp_str );
1141
1138
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 ):"" );
1147
1142
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 );
1152
1150
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" );
1155
1153
}
1156
1154
return ret ;
1157
1155
}
0 commit comments