web-dev-qa-db-fra.com

Problème de requête MySQL multipart/formaté

Je crée un plugin et je souhaite automatiser la création d'un déclencheur MySQL sur une table. Le problème semble être que la requête $ wpdb-> ne semble pas accepter les instructions en plusieurs parties et/ou les requêtes formatées.

Si j'imprime et exécute la requête suivante dans phpMyAdmin, elle retourne avec succès. J'ai également remarqué que si je formais la requête sur une seule ligne, le résultat serait toujours positif, mais dans ce cas, le déclencheur n'est PAS créé.

$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-t-il une autre fonction que je peux utiliser ou un autre moyen de formater la requête pour qu'elle s'exécute correctement?

4
EddyR

Après beaucoup d'essais et d'erreurs, j'ai finalement trouvé une solution utilisant mysqli. Je considère cela comme une solution acceptable car la requête ne sera exécutée que sur les mises à jour de plug-in.

$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();
2
EddyR