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

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - Franky
V
V2EX
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
博客园 - 叶小钗
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
D
Docker
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志

博客园 - 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)方法来返回连接方式;