Make WordPress Core


Ignore:
Timestamp:
11/27/2014 10:59:10 AM (10 years ago)
Author:
pento
Message:

WPDB: Remove the addition of STRICT_ALL_TABLES, added in [30400]. This proved to be incompatible with too many plugins, as well as being incompatible with MySQL 5.7.

See #21212.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/wp-db.php

    r30546 r30587  
    567567     * @var array
    568568     */
    569     protected $incompatible_modes = array( 'NO_ZERO_DATE', 'ONLY_FULL_GROUP_BY', 'TRADITIONAL' );
    570 
    571     /**
    572      * A list of required SQL modes.
    573      *
    574      * @since 4.1.0
    575      * @access protected
    576      * @var array
    577      */
    578     protected $required_modes = array( 'STRICT_ALL_TABLES' );
     569    protected $incompatible_modes = array( 'NO_ZERO_DATE', 'ONLY_FULL_GROUP_BY',
     570        'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'TRADITIONAL' );
    579571
    580572    /**
     
    787779    public function set_sql_mode( $modes = array() ) {
    788780        if ( empty( $modes ) ) {
    789             $modes = $this->get_var( "SELECT @@SESSION.sql_mode" );
    790             if ( $modes ) {
    791                 $modes = $original_modes = explode( ',', $modes );
     781            if ( $this->use_mysqli ) {
     782                $res = mysqli_query( $this->dbh, 'SELECT @@SESSION.sql_mode' );
    792783            } else {
    793                 $modes = $original_modes = array();
    794             }
     784                $res = mysql_query( 'SELECT @@SESSION.sql_mode', $this->dbh );
     785            }
     786
     787            if ( empty( $res ) ) {
     788                return;
     789            }
     790
     791            if ( $this->use_mysqli ) {
     792                $modes_array = mysqli_fetch_array( $res );
     793                if ( empty( $modes_array[0] ) ) {
     794                    return;
     795                }
     796                $modes_str = $modes_array[0];
     797            } else {
     798                $modes_str = mysql_result( $res, 0 );
     799            }
     800
     801            if ( empty( $modes_str ) ) {
     802                return;
     803            }
     804
     805            $modes = explode( ',', $modes_str );
    795806        }
    796807
     
    806817        $incompatible_modes = (array) apply_filters( 'incompatible_sql_modes', $this->incompatible_modes );
    807818
    808         /**
    809          * Filter the list of required SQL modes to include.
    810          *
    811          * @since 4.1.0
    812          *
    813          * @param array $required_modes An array of required modes.
    814          */
    815         $required_modes = (array) apply_filters( 'required_sql_modes', $this->required_modes );
    816 
    817         $modes = array_diff( $modes, $incompatible_modes );
    818         $modes = array_unique( array_merge( $modes, $required_modes ) );
    819 
    820         // Don't run SET SESSION if we have nothing to change.
    821         if ( isset( $original_modes ) ) {
    822             sort( $original_modes );
    823             sort( $modes );
    824             if ( $original_modes === $modes ) {
    825                 return;
     819        foreach( $modes as $i => $mode ) {
     820            if ( in_array( $mode, $incompatible_modes ) ) {
     821                unset( $modes[ $i ] );
    826822            }
    827823        }
     
    829825        $modes_str = implode( ',', $modes );
    830826
    831         $this->query( "SET SESSION sql_mode='$modes_str'" );
    832         if ( $this->last_error ) {
    833             dead_db();
     827        if ( $this->use_mysqli ) {
     828            mysqli_query( $this->dbh, "SET SESSION sql_mode='$modes_str'" );
     829        } else {
     830            mysql_query( "SET SESSION sql_mode='$modes_str'", $this->dbh );
    834831        }
    835832    }
Note: See TracChangeset for help on using the changeset viewer.