PHP Socket PDO SQLSTATE[HY000] [2002] 没有这样的文件或目录

Posted

技术标签:

【中文标题】PHP Socket PDO SQLSTATE[HY000] [2002] 没有这样的文件或目录【英文标题】:PHP Socket PDO SQLSTATE[HY000] [2002] No such file or directory 【发布时间】:2017-03-17 13:15:09 【问题描述】:

简介

在过去的几天里,我一直在研究 php 网络套接字,试图为用户实时检索一些关于连接的各种不同人的信息。

我在 Ubuntu 上,运行最新版本的 XAMPP(位于 /opt/lampp/ 下),我使用 PHP 运行的 Web 套接字,我使用 apt-get install php 安装。这将打开一个没有任何问题的套接字。

我面临的问题与在 PDO 的帮助下从 Web 套接字建立到数据库的连接有关。每当我尝试与位于 localhost 的数据库建立连接时,都会收到以下错误消息:

SQLSTATE[HY000] [2002] No such file or directory

由于 PHP 和我的 mysql 服务器彼此不知道,考虑到 MySQL 是通过 XAMPP 的实例运行的,并且服务器是使用 PHP 的版本运行的(与 XAMPP 的版本相同)我'已经使用apt-get 安装,有人可能会认为这是问题的原因。但是,只要您拥有正确的服务器配置用户名和密码,服务器不应该是可访问的吗?

研究

我一直在对这个主题进行相当多的研究,并为这个问题找到了多种潜在的解决方案,但似乎没有一个能胜任这项工作。例如,on this question,建议您可以通过对您的服务器软件和 PHP 进行一些巫术来解决此错误——我已经尝试过,显然成功了。

关于其他问题,建议您更改此 DSN PDO 设置:

$dsn = "mysql:host=$host;port=$port;dbname=$name;charset=$charset";

为了代替使用“localhost”作为主机,你坚持使用127.0.0.1——事实上,如果我这样做的话,我什至无法连接到我的服务器。这样做,我的 XAMPP 会陷入某种形式的无限循环。从127.0.0.1 更改回localhost 大约一分钟后,它又开始工作了。

我不记得在哪里,但我还记得看到有人说这根本不可行(从 PHP 套接字连接到 MySQL),我觉得这非常奇怪。

有些人似乎还建议切换到Node.js 来处理实时连接,但如果可能的话,我非常希望全部使用 PHP。

此外

我可能只是一个彻头彻尾的白痴(我曾经是 ;-)),但如果有人能指出我正确的方向,我将不胜感激!

【问题讨论】:

【参考方案1】:

你需要指定socket的路径 示例:

$dsn = 'mysql:dbname=testdb;unix_socket=/path/to/socket';

尝试在/opt/lamp中搜索mysql.sock文件

【讨论】:

有一个mysql.so 文件,但没有名为mysql.socket 的文件。 mysql.so 文件不是人类可读的。通过套接字示例,在 DSN 字符串中,我假设您的意思是我似乎无法找到的套接字文件的路径。如果你的意思是我应该指定我的 PHP 服务器套接字的路径,我在指定这个时收到一条错误消息“连接被拒绝”。 mysql.so 是编译后的 PHP 扩展。这为 PHP 提供了 MySQL API。当然,这不是人类可读的。 我收回我所说的话——我很抱歉。在/opt/lampp/var/mysql/mysql.sock 下有一个mysql.sock 文件,当它被添加到unix_socket 时,突然一切正常!我建议您编辑您的答案@daheda,为将来可能遇到此问题的任何人提供这部分解决方案!

以上是关于PHP Socket PDO SQLSTATE[HY000] [2002] 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 — PHP — PDO [重复]

PDO 准备语句中的 SQLSTATE[22018] 错误

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO

PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)

使用PDO MySQL进行PHP搜索和分页 - SQLSTATE [42000]:语法错误

PHP PDO_mssql SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)