Problema de consulta do MySQL com várias partes / formatado

4

Estou criando um plugin e quero automatizar a criação de um MySQL Trigger em uma tabela. O problema parece ser que a consulta $ wpdb- > não parece aceitar instruções multipartes e / ou consultas formatadas.

Se eu imprimir e executar a consulta a seguir no phpMyAdmin, ele retornará o sucesso. Eu também notei que se eu formatasse a consulta toda em 1 linha, ela ainda reportaria sucesso, mas neste caso o gatilho NÃO é criado.

$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 ;"
);

Existe outra função que eu possa usar ou outra maneira de formatar a consulta para ser executada com sucesso?

    
por EddyR 23.11.2011 / 05:38

1 resposta

2

Depois de muita tentativa e erro, finalmente descobri uma solução usando o mysqli. Eu considero uma solução aceitável, já que a consulta só será executada em atualizações de plugins.

$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();
    
por EddyR 24.11.2011 / 11:41