sql >> Databasteknik >  >> RDS >> Mysql

Komplex Wordpress-fråga med flera frågor

Detta verkar vara en begränsning av PHP i sig, se det här inlägget på Wordpress-forumen .

Jag ställdes inför samma problem och det slutade med att jag skapade en anpassad funktion som gör jobbet, jag klistrar in den här ifall den är användbar för någon. Funktionen är ganska enkel eftersom den gör några antaganden, men det borde vara lätt att modifiera den för att skräddarsy olika behov. Specifikt förutsätter det att:

  • Alla uttalanden är infogningar och uppdateringar, det finns ingen data att returnera.
  • Uttalanden separeras med en radslutsekvens.
  • Utdrag är inkluderade i en transaktion.

Här är funktionen:

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

Användningsexempel:

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


  1. HAS_DBACCESS() – Upptäck om en användare kan komma åt en databas i SQL Server

  2. Dynamisk meny php bootstrap mysql

  3. Mysql:Skapa inline-tabell inom select-satsen?

  4. Låsa ett bord med viloläge