Ini tampaknya menjadi batasan PHP itu sendiri, lihat postingan ini di forum Wordpress .
Saya dihadapkan dengan masalah yang sama dan akhirnya membuat fungsi khusus yang berfungsi, saya menempelkannya di sini jika itu berguna untuk seseorang. Fungsinya agak sederhana karena melakukan beberapa asumsi, tetapi harus mudah dimodifikasi untuk menyesuaikan kebutuhan yang berbeda. Secara khusus diasumsikan bahwa:
- Semua pernyataan adalah sisipan dan pembaruan, tidak ada data untuk dikembalikan.
- Pernyataan dipisahkan dengan urutan akhir baris.
- Pernyataan terlampir dalam transaksi.
Berikut adalah fungsinya:
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;
}
Contoh penggunaan:
$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!
}