nextras / multi-query-parser
Parses queries from a SQL file.
Requires
- php: ~8.0
Requires (Dev)
- nette/tester: ~2.0
- phpstan/extension-installer: 1.4.3
- phpstan/phpstan: 2.1.17
- phpstan/phpstan-strict-rules: 2.0.4
- dev-main
- v2.0.0
- v1.0.0
- dev-update-dev-dependencies
- dev-dollar-quoting-mysql
- dev-sqlite-multi-query-parser
- dev-readme-streaming-emphasis
- dev-test/empty-match-fail-early
- dev-refactor/extract-base-test-case
- dev-fix/empty-chunk-handling
- dev-fix/missing-sql-constructs
- dev-fix/chunk-boundary-parsing
- dev-improve-readme
- dev-fix/add-throws-annotations
- dev-fix/superfluous-semicolons
- dev-chunked-file-reading
This package is auto-updated.
Last update: 2026-02-24 17:08:36 UTC
README
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.
Supported Databases
- 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.
Installation
composer require nextras/multi-query-parser
Requires PHP 8.0+.
Usage
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.
License
MIT. See full license.