我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
当前回答
我在docker_compose中使用Docker和MySQL服务名db时遇到了同样的问题。yml文件:
我在.env文件中添加了以下内容:
DB_HOST=db
您还应该确保可以从PHP应用程序中发现您的主机。
这是因为PHP没有弄清楚使用哪个主机来连接。
其他回答
这是因为PDO特别对待“localhost”主机:
注意:仅适用于Unix:当主机名设置为"localhost"时,则 到服务器的连接是通过域套接字进行的。如果PDO_MYSQL是 根据libmysqlclient编译后的套接字文件的位置 在libmysqlclient的编译位置。如果编译PDO_MYSQL mysqlnd的默认套接字可以通过 pdo_mysql.default_socket设置。
(来自http://php.net/manual/en/ref.pdo-mysql.connection.php)
将localhost更改为127.0.0.1将“强制”使用TCP。
注意:mysqli_connect与localhost一起工作很好。
我在Elixir/Gulp和Homestead中运行PHPUnit时遇到了这个问题。
在我的例子中,我将.env文件从DB_HOST=localhost编辑为DB_HOST=192.168.10.10,其中192.168.10.10是我的Vagrant/Homestead主机的IP。
基于@dcarrith的回答…
我没有编辑配置文件,而是在PHP正在查找的位置中创建了一个别名,该别名连接到真正的mysql.sock。(源)
只需运行这两个命令(不需要重新启动):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
我只是在。env文件中做了一个更改
我有如下一行代码。
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=
修改主机名localhost为127.0.0.1
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=
这是在我的情况下工作,因为它不能找到任何主机名,如localhost
并在更改主机名后编写以下命令
php artisan config:clear
php artisan migrate:install
php artisan migrate
解决了
在我的情况下,这是代码中的逻辑问题,连接值在if语句中:
if($_SERVER['HTTP_HOST'] == "localhost")
所以解决方案是添加一个管道,并添加127.0.0.1,这解决了我的问题
if($_SERVER['HTTP_HOST'] == "localhost" || $_SERVER['HTTP_HOST'] == "127.0.0.1")