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