如何从更新或升级中获取数据库更改的SQL信息?

时间:2014-05-14 作者:Marco Florian

当我更新/升级插件、主题甚至WordPress的核心时,它会对数据库产生影响,它会改变很多事情。我如何跟踪它?

问题是我有一个存储库,所有对文件所做的更改都得到了正确的跟踪,但我不知道如何创建一个SQL文件来存储数据库更改(alter、insert、update、drop、create等)。

我使用的工具是Flyway,它可以选择存储库中的SQL文件列表,并将每个文件的查询应用到数据库,所以我的问题是,如何创建或获取WordPress未来更新/升级所做的所有更改的SQL查询?通过这种方式,所有团队都可以从回购中提取资金,我所做的更改将得到传播。

谢谢

1 个回复
最合适的回答,由SO网友:birgire 整理而成

日志查询:

您可以在核心/插件/主题升级期间收集所有查询,以查看发生的情况。只需遵循以下两个步骤:

1) 您应该添加:

define( \'SAVEQUERIES\', TRUE );
到您的wp-config.php 用于在页面加载到中期间收集所有查询的文件$wpdb->queries 大堆只需记住在事后将其移除即可。

2) 然后您可以将其登录到sql.log 文件下面是一个简单的示例:

/**
 * Dump all database queries to the /wp-content/sql.log file.
 */
add_action( \'shutdown\', function(){

    $file =  WP_CONTENT_DIR . \'/sql.log\'; // Edit this filepath to your needs.

    if( current_user_can( \'manage_options\' ) 
         && file_exists( $file )
         && is_writeable( $file )
         && isset( $GLOBALS[\'wpdb\']->queries )
     )
         file_put_contents( 
                $file, 
                date( \'c\' ) . PHP_EOL .  print_r( $GLOBALS[\'wpdb\']->queries, TRUE ), 
                FILE_APPEND 
         );

});
或使用query 的过滤器wpdb 类只记录INSERT, UPDATEDELETE 查询:

/**
 * Log the INSERT, UPDATE, DELETE database queries to the /wp-content/sql.log file.
 */
add_filter( \'query\', function( $query ){
    if( FALSE !== stripos( $query, \'UPDATE \' )
        || FALSE !== stripos( $query, \'INSERT \' )
        || FALSE !== stripos( $query, \'DELETE \' )
     ) {
            $file =  WP_CONTENT_DIR . \'/sql.log\'; // Edit this filepath to your needs.  
            if( file_exists( $file ) && is_writeable( $file ) ) 
                file_put_contents( 
                    $file, 
                    date( \'c\' ) . \' - \' . $query . PHP_EOL, 
                    FILE_APPEND | LOCK_EX 
                );            
    }
    return $query;
}, PHP_INT_MAX );
核心升级文件:对于核心升级,您可能会对这些文件感兴趣

wp包括/版本。php管理/包括/升级。php管理/包含/架构。文件中的php/wp-admin/includes/upgrade.php 您可以找到升级功能:wp_upgrade() 这就叫upgrade_all() 作用它包含每个版本在以下功能方面的数据库升级upgrade_xxx()

例如:

    ...truncated...

    if ( $wp_current_db_version < 22422 )
            upgrade_350();

    if ( $wp_current_db_version < 25824 )
            upgrade_370();

    if ( $wp_current_db_version < 26148 )
            upgrade_372();

    if ( $wp_current_db_version < 26691 )
            upgrade_380();

    maybe_disable_link_manager();

    maybe_disable_automattic_widgets();

    update_option( \'db_version\', $wp_db_version );
    update_option( \'db_upgraded\', true );
我希望这有帮助。

结束

相关推荐

通过GIT获取最新的稳定版本

我目前正在使用一个工作流,该工作流将Wordpress用作git下的子模块。我的工作流涉及从以下URL向我的项目添加子模块:git://github.com/WordPress/WordPress.git The problem:这样做似乎获得了最新的Wordpress版本,包括不稳定的alpha版本。我只是想获取最新的稳定版本,我想知道是否有一些特定的语法可以添加到上面的git URL中,从而允许我指定特定的分支?谢谢