zoukankan      html  css  js  c++  java
  • 代码收藏系列--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日

  • 相关阅读:
    BZOJ3439: Kpm的MC密码
    BZOJ2819: Nim
    BZOJ1901: Zju2112 Dynamic Rankings
    Bzoj3230: 相似子串
    Bzoj4504: K个串
    CF609E. Minimum spanning tree for each edge
    bzoj1832: [AHOI2008]聚会
    css 笔记1
    namespace 相关
    cmd 命令
  • 原文地址:https://www.cnblogs.com/sochishun/p/7061588.html
Copyright © 2011-2022 走看看