Coroutine\MySQL->execFile

这个方法并不存在, 但是可以用PHP代码来实现SQL文件执行, 实际上就是多语句拆分

function read_sql_file(string $file)
{
    $comment_regex = '/(?<!:)\/\/.*|\/\\*(\s|.)*?\*\/|--[^\n]+/';
    $lines = explode("\n", preg_replace($comment_regex, '', co::readFile($file)));
    $init_sql = [];
    $multi = false;
    foreach ($lines as $index => $line) {
        if (strlen($line) === 0) {
            continue;
        }
        if (substr($line, -1, 1) !== ';') {
            if (!$multi) {
                $multi = true;
                goto _new_line;
            } else {
                _append:
                $end_line = &$init_sql[count($init_sql) - 1];
                $end_line = $end_line . $line . "\n";
            }
        } else {
            if ($multi) {
                $multi = false;
                goto _append;
            } else {
                $multi = false;
                _new_line:
                $init_sql[] = "{$line}";
            }
        }
    }

    return $init_sql;
}

$sql_file = read_sql_file(__DIR__ . '/test.sql');
foreach ($sql_file as $line) {
	if (!$mysql->query($line)) {
		echo "Failed! Error#{$mysql->errno}: {$mysql->error}\n";
		exit(1);
	}
}