Make WordPress Core

Ticket #27272: 27272_meta.diff

File 27272_meta.diff, 1.9 KB (added by gitlost, 10 years ago)

Patch ( 2nd wonderboy one) updated for 4.1.

  • src/wp-includes/meta.php

     
    13981398                                $meta_value = trim( $meta_value );
    13991399                        }
    14001400
     1401                        switch ( $meta_type ) {
     1402                                case 'SIGNED':
     1403                                        $cast_string = '%d';
     1404                                        break;
     1405                                case 'UNSIGNED':
     1406                                        $cast_string = '%u';
     1407                                        break;
     1408                                default:
     1409                                        $cast_string = '%s';
     1410                                        break;
     1411                        }
     1412
    14011413                        switch ( $meta_compare ) {
    14021414                                case 'IN' :
    14031415                                case 'NOT IN' :
    1404                                         $meta_compare_string = '(' . substr( str_repeat( ',%s', count( $meta_value ) ), 1 ) . ')';
     1416                                        $meta_compare_string = '(' . substr( str_repeat( ',' . $cast_string, count( $meta_value ) ), 1 ) . ')';
    14051417                                        $where = $wpdb->prepare( $meta_compare_string, $meta_value );
    14061418                                        break;
    14071419
     
    14081420                                case 'BETWEEN' :
    14091421                                case 'NOT BETWEEN' :
    14101422                                        $meta_value = array_slice( $meta_value, 0, 2 );
    1411                                         $where = $wpdb->prepare( '%s AND %s', $meta_value );
     1423                                        $where = $wpdb->prepare( $cast_string . ' AND ' . $cast_string, $meta_value );
    14121424                                        break;
    14131425
    14141426                                case 'LIKE' :
    14151427                                case 'NOT LIKE' :
    14161428                                        $meta_value = '%' . $wpdb->esc_like( $meta_value ) . '%';
    1417                                         $where = $wpdb->prepare( '%s', $meta_value );
     1429                                        $where = $wpdb->prepare( $cast_string, $meta_value );
    14181430                                        break;
    14191431
    14201432                                // EXISTS with a value is interpreted as '='.
    14211433                                case 'EXISTS' :
    14221434                                        $meta_compare = '=';
    1423                                         $where = $wpdb->prepare( '%s', $meta_value );
     1435                                        $where = $wpdb->prepare( $cast_string, $meta_value );
    14241436                                        break;
    14251437
    14261438                                // 'value' is ignored for NOT EXISTS.
     
    14291441                                        break;
    14301442
    14311443                                default :
    1432                                         $where = $wpdb->prepare( '%s', $meta_value );
     1444                                        $where = $wpdb->prepare( $cast_string, $meta_value );
    14331445                                        break;
    14341446
    14351447                        }
    14361448
    1437                         if ( $where ) {
     1449                        if ( $where !== '' ) {
    14381450                                $sql_chunks['where'][] = "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$where}";
    14391451                        }
    14401452                }