php - WordPress 和 mysql 程序

标签 php mysql wordpress mysqli

我正在尝试使用该函数更改 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;');
    }
}

最佳答案

不要使用多重查询,而是使用 mysqli_query() 单独运行每个命令,这样您就根本不需要操作分隔符。

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

相关文章:

php - 如何对数组元素进行分组?

mysql - 为什么 mysqlbinlog 显示 [replace into] 行事件如下

wordpress - 获取页面内容的正确方法

php - 将 Wordpress 帖子显示为带标题的图库

php - 操作 =""在 WordPress 中不起作用

javascript - PHP IF 语句有 2 个条件

php - HTML 表无法正确显示 MySQL 数据

java - 如何导出MySQL工作台数据库以供在其他计算机上运行的Java应用程序使用?

PHP 使用 uasort 对数组进行排序

syslog-ng 在插入操作之前进行 mysql 查询