1#!/usr/bin/env php 2<?php 3 4function read_sql_file(string $file) 5{ 6 $comment_regex = '/(?<!:)\/\/.*|\/\\*(\s|.)*?\*\/|--[^\n]+/'; 7 $lines = explode("\n", preg_replace($comment_regex, '', co::readFile($file))); 8 $init_sql = []; 9 $multi = false; 10 foreach ($lines as $index => $line) { 11 if (strlen($line) === 0) { 12 continue; 13 } 14 if (substr($line, -1, 1) !== ';') { 15 if (!$multi) { 16 $multi = true; 17 goto _new_line; 18 } else { 19 _append: 20 $end_line = &$init_sql[count($init_sql) - 1]; 21 $end_line = $end_line . $line . "\n"; 22 } 23 } else { 24 if ($multi) { 25 $multi = false; 26 goto _append; 27 } else { 28 $multi = false; 29 _new_line: 30 $init_sql[] = "{$line}"; 31 } 32 } 33 } 34 35 return $init_sql; 36} 37 38require __DIR__ . '/include/config.php'; 39 40Swoole\Coroutine\run(function () { 41 echo "[DB-init] initialization MySQL database...\n"; 42 $mysql = new Swoole\Coroutine\MySQL(); 43 $connected = $mysql->connect([ 44 'host' => MYSQL_SERVER_HOST, 45 'port' => MYSQL_SERVER_PORT, 46 'user' => MYSQL_SERVER_USER, 47 'password' => MYSQL_SERVER_PWD, 48 'database' => MYSQL_SERVER_DB 49 ]); 50 if (!$connected) { 51 echo "[DB-init] Connect failed! Error#{$mysql->connect_errno}: {$mysql->connect_error}\n"; 52 exit(1); 53 } 54 $sql_file = read_sql_file(__DIR__ . '/test.sql'); 55 foreach ($sql_file as $line) { 56 if (!$mysql->query($line)) { 57 echo "[DB-init] Failed! Error#{$mysql->errno}: {$mysql->error}\n"; 58 exit(1); 59 } 60 } 61 echo "[DB-init] Done!\n"; 62}); 63