Wydaje się to być ograniczeniem samego PHP, zobacz ten post na forach Wordpress .
Miałem ten sam problem i ostatecznie stworzyłem niestandardową funkcję, która wykonuje zadanie, wklejam ją tutaj na wypadek, gdyby była dla kogoś przydatna. Funkcja jest dość prosta, ponieważ spełnia kilka założeń, ale powinna być łatwa do zmodyfikowania w celu dostosowania do różnych potrzeb. W szczególności zakłada, że:
- Wszystkie oświadczenia są wstawkami i aktualizacjami, nie ma danych do zwrócenia.
- Wyrażenia są oddzielone sekwencją końca wiersza.
- Wyciągi są zawarte w transakcji.
Oto funkcja:
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;
}
Przykład użycia:
$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!
}