Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Komplexe Wordpress-Abfrage mit mehreren Abfragen

Dies scheint eine Einschränkung von PHP selbst zu sein, siehe diesen Beitrag in den Wordpress-Foren .

Ich war mit dem gleichen Problem konfrontiert und habe am Ende eine benutzerdefinierte Funktion erstellt, die den Job erledigt. Ich füge sie hier ein, falls sie für jemanden nützlich ist. Die Funktion ist ziemlich einfach, da sie einige Annahmen trifft, aber es sollte einfach sein, sie zu modifizieren, um sie an unterschiedliche Bedürfnisse anzupassen. Insbesondere wird Folgendes vorausgesetzt:

  • Alle Anweisungen sind Einfügungen und Aktualisierungen, es gibt keine zurückzugebenden Daten.
  • Anweisungen werden durch eine Zeilenendesequenz getrennt.
  • Auszüge sind in einer Transaktion eingeschlossen.

Hier ist die Funktion:

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

Anwendungsbeispiel:

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