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

推荐订阅源

B
Blog
The Cloudflare Blog
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
I
InfoQ
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
H
Help Net Security
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

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