Problema de consulta de MySQL multiparte / formateado

4

Estoy creando un complemento y quiero automatizar la creación de un Activador de MySQL en una tabla. El problema parece ser que $ wpdb- > query no parece aceptar declaraciones multiparte y / o consultas formateadas.

Si imprimo y ejecuto la siguiente consulta en phpMyAdmin, devuelve el éxito. También me di cuenta de que si formateaba la consulta en una sola línea, seguiría teniendo éxito, pero en este caso el activador NO se creó.

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

¿Hay alguna otra función que pueda usar u otra forma de formatear la consulta para que se ejecute correctamente?

    
pregunta EddyR 23.11.2011 - 05:38

1 respuesta

2

Después de muchas pruebas y errores, finalmente descubrí una solución usando mysqli. Considero que es una solución aceptable ya que la consulta solo se ejecutará en las actualizaciones de los complementos.

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

Lea otras preguntas en las etiquetas