Това изглежда е ограничение на самия PHP, вижте тази публикация във форумите на Wordpress .
Бях изправен пред същия проблем и накрая създадох персонализирана функция, която върши работата, поставям я тук, в случай че е полезна за някой. Функцията е доста проста, тъй като прави няколко предположения, но трябва да е лесно да я модифицирате, за да приспособите различни нужди. По-конкретно се предполага, че:
- Всички изрази са вмъквания и актуализации, няма данни за връщане.
- Изявленията са разделени с крайна последователност на реда.
- Извлеченията са приложени в транзакция.
Ето функцията:
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;
}
Пример за употреба:
$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!
}