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