分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

ThinkPHP中的parseDSN方法的坑记录一下

发布时间:2023-09-06 01:22责任编辑:胡小海关键词:PHP
<?php
/**
* DSN解析
* 格式: mysql://username:passwd@localhost:3306/DbName
* @static
* @access public
* @param string $dsnStr
* @return array
*/
function parseDSN($dsnStr) {
???if( empty($dsnStr) ){return false;}
???$info = parse_url($dsnStr);

???if($info[‘scheme‘]){
???????$dsn = array(
???????????‘dbms‘ ?????=> ?$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‘ ?=> ?isset($info[‘path‘]) ? substr($info[‘path‘],1) : ‘‘
???????);
???}else {
???????preg_match(‘/^(.*?)\:\/\/(.*?)\:(.*?)\@(.*?)\:([0-9]{1, 6})\/(.*?)$/‘,trim($dsnStr),$matches);
???????$dsn = array (
???????????‘dbms‘ ?????=> ?$matches[1],
???????????‘username‘ ?=> ?$matches[2],
???????????‘password‘ ?=> ?$matches[3],
???????????‘hostname‘ ?=> ?$matches[4],
???????????‘hostport‘ ?=> ?$matches[5],
???????????‘database‘ ?=> ?$matches[6]
???????);
???}
???$dsn[‘dsn‘] = ?‘‘; // 兼容配置信息数组
???return $dsn;
}

var_dump(parseDSN("mysql://root:123456
@localhost:3306/test")[‘password‘]);

这里分别对解析的mysql连接参数dsn进行了3种情况的测试:

第一条是不带换行的,密码123456是正常解析出来

第二条是Unix下的换行,\n被解析成了一个 “_”

第三条是Windows下的换行,\r\n被解析成了一对 “_”

如此一来,如果代码不够谨慎,在参数参入的dsn里混杂了换行,就会导致mysql连接失败。

 其具体原因,是因为parseDSN方法,使用了php的parse_url函数,可以参照php官方文档:




ThinkPHP中的parseDSN方法的坑记录一下

原文地址:http://www.cnblogs.com/xiangcaiduoyidian/p/7785081.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved