PHP/MySQL | SQLParser :: PHP :: Ошибка
<?php
/*
* Парсер SQL-запросов
*/
class SQLParser {
/*
* Выборка SQL-запросов из файла
* @param string $file
* @return array
*/
public static function getQueriesFromFile($file) {
$sql = file_get_contents($file);
return self::getQueries($sql);
}
/*
* Разбор SQL-строки на запросы
* @param string $sql
* @return array
*/
public static function getQueries($sql) {
$queries = [];
$strlen = mb_strlen($sql);
$query = NULL;
for ($position = 0; $position < $strlen; ++$position) {
$char = $sql{$position};
switch ($char) {
case '-':
if (mb_substr($sql, $position, 2) !== '--') {
$query .= $char;
break;
}
case '#':
while ($char !== "\r" && $char !== "\n" && $position < $strlen - 1) {
$char = $sql{++$position};
}
break;
case '`':
case '\'':
case '"':
$quote = $char;
$query .= $quote;
while ($position < $strlen - 1) {
$char = $sql{++$position};
if ($char === '\\') {
$query .= $char;
if ($position < $strlen - 1) {
$char = $sql{++$position};
$query .= $char;
if ($position < $strlen - 1) {
$char = $sql{++$position};
}
} else {
break;
}
}
if ($char === $quote) {
break;
}
$query .= $char;
}
$query .= $quote;
break;
case ';':
$query = trim($query);
if ($query) {
$queries[] = $query;
}
$query = NULL;
break;
default:
$query .= $char;
break;
}
}
$query = trim($query);
if ($query) {
$queries[] = $query;
}
return $queries;
}
}
/*
* Test
* Из файла
*/
print_r(SQLParser::getQueriesFromFile('tables.sql'));
?>
Что не так с этим парсером?

Не удаляет комментарии типа:
--
-- Блабла
--
А должен возвращать массив пропарсенных запросов
Тут нет даже функции вырезки комментариев, но по сути они же не мешают
Сибирский, однострочные комментарии заберут себе запрос
DELETED
14 сентября 2017, в 13:35
Delete
нужно или увеличивать после вывода $i++ или изменить условие на <=
________
посл. ред. 14.09.2017 в 13:45; всего 4 раз(а); by PhpStorm