Mysql
 sql >> Database >  >> RDS >> Mysql

Query Wordpress complesse che utilizzano più query

Questa sembra essere una limitazione dello stesso PHP, vedi questo post sui forum di Wordpress .

Ho dovuto affrontare lo stesso problema e ho finito per creare una funzione personalizzata che fa il lavoro, la incollo qui nel caso sia utile a qualcuno. La funzione è piuttosto semplice poiché fa alcune ipotesi, ma dovrebbe essere facile modificarla per adattarla a diverse esigenze. Nello specifico presuppone che:

  • Tutte le dichiarazioni sono inserti e aggiornamenti, non ci sono dati da restituire.
  • Le istruzioni sono separate da una sequenza di fine riga.
  • Le dichiarazioni sono allegate all'interno di una transazione.

Ecco la funzione:

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;
}

Esempio di utilizzo:

$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!
}