PHP7中不能用DSN字串了,有没有什么解决办法?

浏览:634 发布日期:2018/09/05 分类:求助交流 关键字: php7 DSN
新项目,用的ThinkPHP5 顺便换成了PHP7,结果发现原来用习惯的DSN字符串连接数据库的方式不好用了,跟踪来跟踪去,发现原来是PHP7中parse_url不能正常解析DSN字符串了,形如‘mysql://root:[email protected]:3306/thinkphp#utf8’的字符串解析结果全是Flase。

不过,用习惯了DSN真的很方便(我的项目中需要连接好多个不同的数据库),现在突然不能用了,除了自己重写parse_url功能,有没有别的解决办法?

对应代码在DB.php中:    /**
     * DSN 解析
     * 格式: mysql://username:[email protected]:3306/DbName?param1=val1¶m2=val2#utf8
     * @access private
     * @param  string $dsnStr 数据库 DSN 字符串解析
     * @return array
     */
    private static function parseDsn($dsnStr)
    {
        $info = parse_url($dsnStr);

        if (!$info) {
            return [];
        }

        $dsn = [
            'type'     => $info['scheme'],
            'username' => isset($info['user']) ? $info['user'] : '',
            'password' => isset($info['pass']) ? $info['pass'] : '',
            'hostname' => isset($info['host']) ? $info['host'] : '',
            'hostport' => isset($info['port']) ? $info['port'] : '',
            'database' => !empty($info['path']) ? ltrim($info['path'], '/') : '',
            'charset'  => isset($info['fragment']) ? $info['fragment'] : 'utf8',
        ];

        if (isset($info['query'])) {
            parse_str($info['query'], $dsn['params']);
        } else {
            $dsn['params'] = [];
        }

        return $dsn;
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>