代码收藏系列--php--加载sql文件并解析成数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码收藏系列--php--加载sql文件并解析成数组相关的知识,希望对你有一定的参考价值。

 php加载sql文件,解析成以分号分割的数组。(支持存储过程和函数提取,自动过滤注释) 

/**
 * 加载sql文件为分号分割的数组
 * <br />支持存储过程和函数提取,自动过滤注释
 * <br />例如: var_export(load_sql_file(‘mysql_routing_example/fn_cdr_parse_accountcode.sql‘));
 * @param string $path 文件路径
 * @return boolean|array
 * @since 1.0 <2015-5-27> SoChishun Added.
 */
function load_sql_file($path, $fn_splitor = ‘;;‘) {
    if (!file_exists($path)) {
        return false;
    }
    $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $aout = false;
    $str = ‘‘;
    $skip = false;
    $fn = false;
    foreach ($lines as $line) {
        $line = trim($line);
        // 过滤注释
        if (!$line || 0 === strpos($line, ‘--‘) || 0 === strpos($line, ‘*‘) || 0 === strpos($line, ‘/*‘) || (false !== strpos($line, ‘*/‘) && strlen($line) == (strpos($line, ‘*/‘) + 2))) {
            if (!$skip && 0 === strpos($line, ‘/*‘)) {
                $skip = true;
            }
            if ($skip && false !== strpos($line, ‘*/‘) && strlen($line) == (strpos($line, ‘*/‘) + 2)) {
                $skip = false;
            }
            continue;
        }
        if ($skip) {
            continue;
        }
        // 提取存储过程和函数
        if (0 === strpos($line, ‘DELIMITER ‘ . $fn_splitor)) {
            $fn = true;
            continue;
        }
        if (0 === strpos($line, ‘DELIMITER ;‘)) {
            $fn = false;
            $aout[] = $str;
            $str = ‘‘;
            continue;
        }
        if ($fn) {
            $str .= $line . ‘ ‘;
            continue;
        }
        // 提取普通语句
        $str .= $line;
        if (false !== strpos($line, ‘;‘) && strlen($line) == (strpos($line, ‘;‘) + 1)) {
            $aout[] = $str;
            $str = ‘‘;
        }
    }
    return $aout;
}

 

版权声明:本文采用署名-非商业性使用-相同方式共享(CC BY-NC-SA 3.0 CN)国际许可协议进行许可,转载请注明作者及出处。
本文标题:代码收藏系列--php--加载sql文件并解析成数组
本文链接:http://www.cnblogs.com/sochishun/p/7061588.html
本文作者:SoChishun (邮箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
发表日期:2017年6月23日





以上是关于代码收藏系列--php--加载sql文件并解析成数组的主要内容,如果未能解决你的问题,请参考以下文章

mysql字符串转换成字典

在SQL语句里面如何将字符型转换成数字型

在PHP中解析XSD文件并在XSD中显示元素

单击按钮,将数据添加到 SQL 并再次单击以删除数据,需要 php 代码

ECShop全系列版本远程代码执行漏洞复现

怎么把“文件路径”这个字符串转换成数字型?转换完成后还是文件路径吗?