2015-08-14 64 views
2

,在瀏覽器中運行我的工作的index.php看起來是這樣的:爲什麼我不能通過終端運行正常的PDO連接?

<?php 
    $dbh = new PDO(...whatever 

它工作在一個水車就好了。我什麼事都能做。

運行在像終端:

shell> php index.php 

我得到一些錯誤:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /Library/WebServer/Documents/index.php:3 
Stack trace: 
#0 /Library/WebServer/Documents/index.php(3): PDO->__construct('mysql:host=loca...', 'root', 'frekinpassword') 
#1 {main} 
    thrown in /Library/WebServer/Documents/index.php on line 3 

這是怎麼回事?

回答

4

我想,你的unix_socket改變,你不改變你的PHP客戶端的php.ini

首先,讓您的unix_socket位置。

$ mysql -uroot -p 

輸入你的MySQL密碼和登錄命令行你的MySQL服務器。

mysql> show variables like '%sock%'; 
+---------------+---------------------------------------+ 
| Variable_name | Value         | 
+---------------+---------------------------------------+ 
| socket  | /opt/local/var/run/mysql5/mysqld.sock | 
+---------------+---------------------------------------+ 

您的unix_soket可能是不同的。

然後改變你的php.ini,從

<? phpinfo(); 

找到你的php.ini文件,您也許安裝PHP的許多不同的版本,所以請不要假設你的php.ini文件的位置,得到它你的'phpinfo';

更改你的php.ini:

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock 

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock 

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock 

然後重新啓動Apache或PHP-FPM。

1

它看起來像你使用localhost作爲MySQL數據庫的連接字符串。當MySQL看到localhost時,它解釋爲「使用mysql.sock」文件。 PHP告訴你它找不到那個mysql.sock文件。

最可能的原因是您的網絡服務器和命令行PHP配置爲使用不同的php.ini文件,而這些php.ini文件具有不同配置的mysql.sock文件。您可以通過經由web服務器加載的PHP文件運行

phpinfo(); 

找到你的Web服務器php.ini文件(S)。您可以通過運行以下

$ php --ini 

如果你不能修復您的命令行php.ini文件,考慮通過127.0.0.1,而不是localhost連接到你的MySQL服務器找到你的命令行php.ini文件(S)。當你使用IP地址時,PHP應該嘗試通過網絡而不是套接字文件進行連接。