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

Kompleks Wordpress-forespørgsel ved hjælp af flere forespørgsler

Dette ser ud til at være en begrænsning af PHP i sig selv, se dette indlæg på Wordpress-foraene .

Jeg stod over for det samme problem og endte med at oprette en brugerdefineret funktion, der gør jobbet, jeg indsætter den her, hvis den er nyttig for nogen. Funktionen er ret enkel, da den gør nogle få antagelser, men det burde være let at ændre den for at skræddersy forskellige behov. Det forudsætter specifikt, at:

  • Alle udsagn er indsættelser og opdateringer, der er ingen data at returnere.
  • Udsagn er adskilt med en ende på linje-sekvens.
  • Opgørelser er vedlagt en transaktion.

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

Eksempel på brug:

$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. Forhindrer JDBC-specifikationen '?' fra at blive brugt som operator (uden for anførselstegn)?

  2. Kan ikke forbinde postgreSQL med psycopg2

  3. Hvordan blev denne logik for registreringer/fanout afledt for tilfældet uden statistik i MySQL's Query Planner?

  4. Hvordan kan jeg vælge det længste tekstfelt, når jeg bruger GROUP BY i mysql, a la MAX()?