Loading...
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'));

?>

Что не так с этим парсером?Гг
Не удаляет комментарии типа:
--
-- Блабла
--
А должен возвращать массив пропарсенных запросовГг
Тут нет даже функции вырезки комментариев, но по сути они же не мешают
Сибирский, однострочные комментарии заберут себе запрос:-D
rekmixa, в циклах со стартом 0 и увеличением до вывода ++$i с условием < выполнится на одну интерацию меньше, так как старт идёт не с нуля а с единицы .45.

нужно или увеличивать после вывода $i++ или изменить условие на <=
________
посл. ред. 14.09.2017 в 13:45; всего 4 раз(а); by PhpStorm
Онлайн: 1
Время:
Gen. 0.1149
(c) Bym.Guru 2010-2025