A streaming PHP parser for splitting multi-query SQL files into individual statements. Handles database-specific syntax like custom delimiters, dollar-quoted strings, and BEGIN...END blocks. The parser reads input in small chunks and yields statements one by one -- it never loads the entire file into memory, making it suitable for large SQL dumps.
- MySQL -- backtick identifiers,
DELIMITERcommand,#comments - PostgreSQL -- dollar-quoted strings (
$BODY$...$BODY$),E'...'escape strings - SQL Server --
[bracketed]identifiers,BEGIN...ENDblocks - SQLite -- all three identifier styles (
"double",`backtick`,[bracket]),BEGIN...ENDblocks for triggers
All parsers handle standard SQL comments (--, /* */), quoted strings, and semicolon delimiters.
composer require nextras/multi-query-parserRequires PHP 8.0+.
Parse a SQL file:
use Nextras\MultiQueryParser\MySqlMultiQueryParser;
$parser = new MySqlMultiQueryParser();
foreach ($parser->parseFile('migrations.sql') as $query) {
$connection->query($query);
}Parse a string:
$sql = "CREATE TABLE users (id INT); INSERT INTO users VALUES (1);";
foreach ($parser->parseString($sql) as $query) {
$connection->query($query);
}Parse from a file stream:
$stream = fopen('migrations.sql', 'r');
foreach ($parser->parseFileStream($stream) as $query) {
$connection->query($query);
}Available parsers: MySqlMultiQueryParser, PostgreSqlMultiQueryParser, SqlServerMultiQueryParser, SqliteMultiQueryParser.
MIT. See full license.