多部分/格式化MySQL查询问题

时间:2011-11-23 作者:EddyR

我正在创建一个插件,我想在表上自动创建一个MySQL触发器。问题似乎是$wpdb->query似乎不接受多部分语句和/或格式化查询。

如果我在phpMyAdmin中打印并运行以下查询,它将返回success。我还注意到,如果我将查询全部格式化为一行,它仍然会报告成功,但在这种情况下,不会创建触发器。

$wpdb->query(
    "DELIMITER //
    DROP TRIGGER IF EXISTS {$wpdb->get_blog_prefix($site->id)}post_queue_insert//
    CREATE TRIGGER {$wpdb->get_blog_prefix($site->id)}queue_insert BEFORE INSERT ON {$wpdb->get_blog_prefix($site->id)}posts
    FOR EACH ROW BEGIN
        INSERT INTO {$wpdb->base_prefix}post_queue (action_id, action_type, action_status, action_timestamp, sync_complete, SITE_ID) VALUES (NEW.ID, NEW.post_type, NEW.post_status, UNIX_TIMESTAMP(now()), 0, {$site->id});
    END//
    DELIMITER ;"
);
我是否可以使用其他函数或其他方式格式化查询以成功运行?

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

经过多次尝试和错误,我终于找到了使用mysqli的解决方案。我认为这是一个可以接受的解决方案,因为查询只会在插件更新上运行。

$mysqli = new mysqli();
$mysqli->connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$sql = "
    DROP TRIGGER IF EXISTS {$wpdb->get_blog_prefix($site->id)}post_queue_insert;
    CREATE TRIGGER {$wpdb->get_blog_prefix($site->id)}post_queue_insert BEFORE INSERT ON {$wpdb->get_blog_prefix($site->id)}posts
    FOR EACH ROW BEGIN
        INSERT INTO {$wpdb->base_prefix}post_queue (action_id, action_type, action_status, action_event, action_timestamp, sync_complete, SITE_ID) VALUES (NEW.ID, NEW.post_type, NEW.post_status, \'insert\', UNIX_TIMESTAMP(now()), 0, {$site->id});
    END;
";

$mysqli->multi_query($sql);
$mysqli->close();

结束

相关推荐

使用jQuery表单插件的前端提交表单

也许有人能帮我解决一个小问题。我正在尝试使用这个:http://jquery.malsup.com/form/ 为Wordpress创建提交表单。我已经在一个常规的网站(不是WP)上测试过了,它很有效。我不明白为什么它在wp中不起作用。这是我的表格。我已经创建了两个页面模板,一个是表单,另一个是wp\\u insert\\u post code。如果我将表单action更改为action=”http://mysite.com/page.php“它可以工作,如果我将它指向一个页面模板,它就不能工作。我需要它