php – 混淆PDO问题:无法通过套接字连接/拒绝访问/无法连接到服务器(共享主机)

所以这个问题从什么改变了,我会把原来的问题放在下面,以防止对我的答案感到不好的评价,就像我在编辑他的问题后,我回答的那样:

所以我正在安装PDO的一个(真正的跛脚)共享主机,但是它不起作用。
具有默认参数

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=THE_DB_NAME', 'THE_USER', 'THE_PASSWORD');
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

它抛出这个消息:

SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

有一个简单的mysql_connect,它的工作。

并且套接字路径似乎是正确的(phpinfo和这个查询:

show variables like 'socket';

确认。

Localhost重定向到10.103.0.14(此数据来自mysql_get_host_info()和phpMyAdmin)

在PDO中,如果我以127.0.0.1替换localhost,我会得到

SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (111) 

如果我将localhost替换为10.103.0.14:

Access denied for user 'USER_NAME'@'10.103.0.14' (using password: YES

IP地址(127.0.0.1和10.103.0.14)都可以与mysql_connect配合使用。

显然问题来自PDO连接。

有人知道这可能来自哪里,或/和任何方式来解决?

一些服务器数据:

PHP版本:5.2.10
您可以看到服务器的phpinfo:http://web.lerelaisinternet.com/abcd.php?v=5
没有命令行可能
(我知道这应该是技术支持者的工作,但是他们的工作很慢)

谢谢

上一个问题:

如何在共享主机上找到mysql.sock(需要很多方法…)

所以今天的问题是:PDO连接在共享主机上不起作用,它应该是(它安装在服务器上)。
只是一个基本的PDO连接:

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=THE_DB_NAME', 'THE_USER', 'THE_PASSWORD');
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

抛出此消息:

SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

一个常规的mysql连接:

mysql_connect("localhost", "THE_USER", "THE_PWD") or die(mysql_error()); 
mysql_select_db("24DLJLRR1") or die(mysql_error());;
echo 'Connected to database <br/>';

工作正常。

显然,它找不到.sock。
我想指定正确的地址应该工作,我尝试了一些我在互联网上找到的“经典”mysql路径,没有成功。
phpinfo说它在这个地址(/var/lib/mysql/mysql.sock)
(PHP版本是5.2.10)
您可以看到服务器的phpinfo:http://web.lerelaisinternet.com/abcd.php?v=5

所以我想弄清楚它在哪里是!
我试图看phpMyAdmin接口,但我找不到信息,加上似乎phpMyAdmin连接到不同的服务器(它有一个不同的IP地址,并试图连接到它与php给出一个“错误的密码”错误)。 mysql_connect也连接到这个地址,我认为它重定向到一个不同的服务器与一些内部的密码/登录。

那么如果你有任何想法如何获得这个信息(提供商的技术支持是“修复问题”…已经1个月了…)。
也许这个问题来自别的地方,但同样的东西可以在其他共享的主机上运行。

PDO的需要是因为我使用Symfony框架与Doctrine这个网站,而Doctrine插件需要PDO …我不想从头开始重做网站!

谢谢你的帮助 !

最佳答案
这已经被标记为回答,但没有真正解决(不改变数据库)。
所以,为了防止有人喜欢我也遇到这个问题?

解决这个问题的最简单方法是首先获取套接字路径(通过查看php.ini文件或使用:phpmyadmin或控制台(或在mysql或mysqli中构造它)

…运行以下查询(除PDO之外的任何内容):

show variables like 'socket';       //as mentioned by symcbean

那么,在PDO连接字符串中,将其更改为使用套接字而不是主机名:

$dbc = new
PDO(“mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=$DBName”,
$User, $Password, array(PDO::ATTR_PERSISTENT => true)); // using
persistent connections

这对我有用

转载注明原文:php – 混淆PDO问题:无法通过套接字连接/拒绝访问/无法连接到服务器(共享主机) - 代码日志