@@ -566,16 +566,8 @@ class wpdb {
566566 * @access protected
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 /**
581573 * Whether to use mysqli over mysql.
@@ -786,12 +778,31 @@ public function set_charset( $dbh, $charset = null, $collate = null ) {
786778 */
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 ' );
783+ } else {
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 ];
792797 } else {
793- $ modes = $ original_modes = array ( );
798+ $ modes_str = mysql_result ( $ res , 0 );
794799 }
800+
801+ if ( empty ( $ modes_str ) ) {
802+ return ;
803+ }
804+
805+ $ modes = explode ( ', ' , $ modes_str );
795806 }
796807
797808 $ modes = array_change_key_case ( $ modes , CASE_UPPER );
@@ -805,32 +816,18 @@ public function set_sql_mode( $modes = array() ) {
805816 */
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 }
828824
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 }
836833
0 commit comments