惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
爱范儿
爱范儿
罗磊的独立博客
V
V2EX
量子位
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
Jina AI
Jina AI
博客园 - 叶小钗
小众软件
小众软件
博客园 - 【当耐特】
Y
Y Combinator Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - yiyide266

[Express.js]next()函数的作用 [css]浏览器默认样式 have的实质 This comes after Chinese authorities announced an investigation against Mayday, in response to a viral video. [Linux]终端ssh远程连接如何保持 [PHP]回调函数参数(callable类型)的一些细节 [javascript]端序(endian)和Buffer对象的read|write系列函数 vscode处理HTML标签两个光标的问题 intend,intent和indent [css]一个块格式化上下文(BFC)阻止外边距重叠的示例 [PHP_yaf]内部注册到spl_autoload的方法 [PHP_yaf]Yaf_Application [PHP_yaf]写在用户代码的配置项 [PHP_yaf]保存在php.ini中的配置项 [PHP]spl_autoload函数栈的向下遍历机制 [英语单词]关于战争 [MySql]1820错误码重置密码方法 [Linux]信号捕捉函数总是第一时间执行 [Linux]信号捕捉函数与exec
[PHP]PDO的dsn对mysql的连接影响
yiyide266 · 2023-08-01 · via 博客园 - yiyide266

dsn的host字段中,'localhost'是一个影响其连接协议的值,当host取值'localhost',PDO会坚持使用unixsocket的方式去连接数据库:

'mysql:host=localhost;dbname=mydb'

以上配置,PDO会寻找php.ini中的pdo_mysql.default_socket值,尝试运用此路径通过unixsocket来连接mysql,如果此配置值不存在或者路径不可用,PDO就会抛出异常:

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in xxx

以上错误信息是根据pdo_mysql.default_socket值的实际情况描述的,例如,如果路径因权限原因无法访问,则抛出:

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Permission denied in xxx

也可以通过dsn的unix_socket字段来指定socket文件路径,意义等同于pdo_mysql.default_socket

'mysql:unix_socket=/var/lib/mysql/mysql.sock;dbname=mydb'

运用这种方式就不需要显式指定host字段了,PDO总是在使用unixsocket连接方式时把host设置为localhost,这是无法通过显式指定host改变的:

'mysql:host=my_host;unix_socket=/var/lib/mysql/mysql.sock;dbname=mydb'

以上配置,最终host还是localhost,my_host不会被预期设置;

所以,如果你一定需要用TCP的方式连接mysql,务必不能把host=localhost;

成功连接上mysql后你可以调用PDO实例的getAttribute(PDO::ATTR_CONNECTION_STATUS)方法来返回连接方式;