PHP PDO访问MySQL,错误:SQLSTATE[HY000] [2002] No such file or directory
如题所示,在PHP代码使用PDO的方式访问MySQL的数据库的时候遇到了错误。
具体如下:
页面。
该WEB的PHP代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
[root@itop datatables.adamhuan.com]# pwd /www/wwwroot/datatables.adamhuan.com [root@itop datatables.adamhuan.com]# [root@itop datatables.adamhuan.com]# ls -ltr *.php -rw-r--r-- 1 root root 3782 Feb 13 17:18 me.php -rwxr-xr-x 1 www www 21 Feb 13 22:58 phpinfo.php -rw-r--r-- 1 root root 875 Feb 13 23:12 php2mysql.php [root@itop datatables.adamhuan.com]# [root@itop datatables.adamhuan.com]# cat php2mysql.php <?php //变量声明 $servername = "localhost"; //$dbName="" $username = "root"; $password = "你的MySQL的口令"; //MySQLi extention //------------------------------- // 创建连接 //面向对象 //$conn = new mysqli($servername, $username, $password); //面向过程 //$conn = mysqli_connect($servername, $username, $password); // 检测连接 //if ($conn->connect_error) { // die("连接失败: " . $conn->connect_error); //} //echo "连接成功"; //PDO //---------------------------------------- try { $conn = new PDO("mysql:host=$servername;", $username, $password); echo "连接成功"; } catch(PDOException $e) { echo "连接失败"; echo "==================="; echo $e->getMessage(); } //关闭连接 //MYSQLI //面向对象 //$conn->close(); //面向过程 //mysqli_close($conn); //PDO $conn = null; ?> [root@itop datatables.adamhuan.com]# |
造成这个问题的原因是PHP PDO无法找到正确的MySQL的sock:
1. mysql.sock
2. mysqld.sock
解决这个问题,有两种方法。
1. 在PHP中声明MySQL的sock位置:
php.ini中修改参数:
1 |
pdo_mysql.default_socket= /tmp/mysqld.sock |
指向到正确的MySQL的SOCK即可。
2. 将PHP PDO连接的DSN的主机名(host=)从【localhost】改成【127.0.0.1】
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
[root@itop datatables.adamhuan.com]# pwd /www/wwwroot/datatables.adamhuan.com [root@itop datatables.adamhuan.com]# [root@itop datatables.adamhuan.com]# ls -ltr *.php -rw-r--r-- 1 root root 3782 Feb 13 17:18 me.php -rwxr-xr-x 1 www www 21 Feb 13 22:58 phpinfo.php -rw-r--r-- 1 root root 875 Feb 13 23:12 php2mysql.php [root@itop datatables.adamhuan.com]# [root@itop datatables.adamhuan.com]# cat php2mysql.php <?php //变量声明 //$servername = "localhost"; $servername = "127.0.0.1"; //$dbName="" $username = "root"; $password = "你的MySQL的口令"; //MySQLi extention //------------------------------- // 创建连接 //面向对象 //$conn = new mysqli($servername, $username, $password); //面向过程 //$conn = mysqli_connect($servername, $username, $password); // 检测连接 //if ($conn->connect_error) { // die("连接失败: " . $conn->connect_error); //} //echo "连接成功"; //PDO //---------------------------------------- try { // eg: $dsn = "$dbType:host=$host;dbname=$dbName"; $conn = new PDO("mysql:host=$servername;", $username, $password); echo "连接成功"; } catch(PDOException $e) { echo "连接失败"; echo "==================="; echo $e->getMessage(); } //关闭连接 //MYSQLI //面向对象 //$conn->close(); //面向过程 //mysqli_close($conn); //PDO $conn = null; ?> [root@itop datatables.adamhuan.com]# |
然后就没问题了。
——————————
Done。