在过去的几天里,我一直在搞乱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。
我可能只是一个完整的白痴(我是;-)),但如果有人能指出我正确的方向,那将非常感激!
答案 0 :(得分:2)
您需要指定套接字的路径 例如:
$dsn = 'mysql:dbname=testdb;unix_socket=/path/to/socket';
尝试搜索/ opt / lamp
中的文件mysql.sock