WordPress和MySQL程序

WordPress和MySQL程序

我正在尝试使用该功能替换WP表。如果我从mysql客户端(添加列)调用mysql代码,效果很好,但是当我通过$wpdb->query()调用它时,它给了我指向DELIMITER行的错误。经过一番谷歌搜索,我发现我应该为此目的使用mysqli。现在,错误日志为空,但仍未创建列。有人知道我在做什么错吗?功能代码如下

global $wpdb;
$tables=array(
    'wp_users',
    'wp_usermeta',
    'wp_term_taxonomy',
    'wp_term_relationships',
    'wp_terms',
    'wp_taxonomymeta',
    'wp_posts',
    'wp_postmeta',
    'wp_p2p',
    'wp_p2pmeta',
    'wp_options',
    'wp_fb_user_timezone',
    'wp_fb_coaching_call_report_team_user',
    'wp_fb_coaching_call_report_team',
    'wp_fb_3d_notes',
    'wp_comments',
    'wp_commentmeta',
    'wp_coaching_teams_student',
    'wp_coaching_teams_coach',
    'wp_coaching_teams',
    'wp_coaching_call_count'
);
if (is_array($tables)&&count($tables)>0)
{
    foreach ($tables as $table)
    {
        $aaa=mysqli_multi_query($wpdb->dbh,'DELIMITER $$
                        DROP PROCEDURE IF EXISTS add_createdat_and_updatedat_fields $$
                        CREATE PROCEDURE add_createdat_and_updatedat_fields()
                        BEGIN
                            IF EXISTS(SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() AND table_name=\''.$table.'\') THEN
                                IF NOT EXISTS ((SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name=\''.$table.'\' AND column_name=\'created_at\')) THEN
                                ALTER TABLE `'.$table.'` ADD `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;
                                END IF;
                                IF NOT EXISTS ((SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name=\''.$table.'\' AND column_name=\'updated_at\')) THEN
                                ALTER TABLE `'.$table.'` ADD `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;
                                END IF;
                            END IF;
                        END $$
                        CALL add_createdat_and_updatedat_fields() $$
                        DROP PROCEDURE IF EXISTS add_createdat_and_updatedat_fields $$
                    DELIMITER;');
    }
}

最佳答案

不要使用multiquery,而是使用mysqli_query()分别运行每个命令,这样就根本不需要操纵分隔符。

关于php - WordPress和MySQL程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32247411/

10-11 13:45