Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête Wordpress complexe utilisant plusieurs requêtes

Cela semble être une limitation de PHP lui-même, voir ce message sur les forums Wordpress .

J'ai été confronté au même problème et j'ai fini par créer une fonction personnalisée qui fait le travail, je la colle ici au cas où elle serait utile à quelqu'un. La fonction est plutôt simple car elle fait quelques hypothèses, mais il devrait être facile de la modifier pour adapter différents besoins. Plus précisément, il suppose que :

  • Toutes les déclarations sont des insertions et des mises à jour, il n'y a aucune donnée à renvoyer.
  • Les instructions sont séparées par une séquence de fin de ligne.
  • Les relevés sont joints à une transaction.

Voici la fonction :

function execute_multiline_sql($sql) {
    global $wpdb;
    $sqlParts = array_filter(explode("\r\n", $sql));
    foreach($sqlParts as $part) {
        $wpdb->query($part);
        if($wpdb->last_error != '') {
            $error = new WP_Error("dberror", __("Database query error"), $wpdb->last_error);
            $wpdb->query("rollback;");
            return $error;
        }
    }
    return true;
}

Exemple d'utilisation :

$sql = "start transaction;\r\n" .
       "insert into ...;\r\n" .
       "update ...;\r\n" .
       "commit;\r\n"
       ;

$result = execute_multiline_sql($sql);
if(is_wp_error($result)) {
    //Fail!
}