wazaari / mysql-parser

支持DELIMITER的MySQL文件解析器

此包的官方仓库似乎已不存在,因此该包已被冻结。

v1.0.0 2015-11-27 10:54 UTC

This package is auto-updated.

Last update: 2024-04-10 02:33:02 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License Scrutinizer Code Quality

MySQLParser

支持DELIMITER的MySQL文件解析器

描述

此类提供了一个支持DELIMITER的MySQL文件解析器。给定一个MySQL文件可以被解析并分割成命令,考虑到多行查询和分隔符。它不依赖于任何第三方库并且可以独立工作。

此类附带测试用例,并使用PHPUnit执行它们。以下代码给出了如何使用此类的示例。假设有一个名为 test.sql 的文件,其内容如下。

SELECT * FROM `exampl\;eTable`;

DELIMITER //

UPDATE `example_table` SET `a` = "asdas"
WHERE `col1` = "asd"//

DROP TABLE `c`// DROP TABLE `d`//
DELIMITER ;

DROP TABLE `a`; DROP TABLE `b`;

然后以下代码将得到以下结果

use wazaari\MySQLParser\MySQLParser;

$parser = new MySQLParser();
$a = parser->parseFile("test.sql");

$a = array (
    0 => array (
        'command' => 'SELECT * FROM `exampl\;eTable`',
        'delimiter' => ';',
    ),
    1 => array (
        'command' => 'DELIMITER //',
        'delimiter' => null,
    ),
    2 => array (
        'command' => 'UPDATE `example_table` SET `a` = "asdas" WHERE `col1` = "asd"',
        'delimiter' => '//',
    ),
    3 => array (
        'command' => 'DROP TABLE `c`',
        'delimiter' => '//',
    ),
    4 => array (
        'command' => 'DROP TABLE `d`',
        'delimiter' => '//',
    ),
    5 => array (
        'command' => 'DELIMITER ;',
        'delimiter' => null,
    ),
    6 => array (
        'command' => 'DROP TABLE `a`',
        'delimiter' => ';',
    ),
    7 => array (
        'command' => 'DROP TABLE `b`',
        'delimiter' => ';',
    ),
);

安装

安装此库的首选方式是使用 Composer。包名为 wazaari/MySQLParser。请参阅这篇博客文章了解如何安装Composer包。简而言之,只需使用 composer require wazaari/MySQLParser 后跟 composer install。将自动生成适当的 .lock 文件。

开放问题

目前,已经识别了使用反斜杠转义的转义分隔符。然而,MySQL允许在引号环境中使用分隔符变量而不需要转义字符,但目前此库未识别这一点。