これはPHP自体の制限のようです。
私は同じ問題に直面し、その仕事をするカスタム関数を作成することになりました。誰かに役立つ場合に備えて、ここに貼り付けます。この関数は、いくつかの仮定を行うためかなり単純ですが、さまざまなニーズに合わせて簡単に変更できるはずです。具体的には、次のことを前提としています。
- すべてのステートメントは挿入と更新であり、返すデータはありません。
- ステートメントは行末シーケンスで区切られます。
- ステートメントはトランザクション内に含まれています。
関数は次のとおりです:
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!
}