一尘不染

仅PDO令人困惑的问题:无法通过套接字连接/访问被拒绝/无法连接到服务器(共享主机)

mysql

所以问题从根本上改变了,我将把原来的问题留在下面,以防止对有人回答他的问题后的回答进行不好的评论:

因此,我正在安装(确实很DO脚的)共享主机,该主机已安装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中,如果我将localhost替换为127.0.0.1,我将得到

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

如果我将本地主机替换为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 …我不想从头开始重做网站!

谢谢你的帮助 !


阅读 307

收藏
2020-05-17

共1个答案

一尘不染

一年后,我找到了解决此问题的解决方案:使用SQLite数据库。PDO工作正常,但不适用于MySQL

编辑,因为每个人都对此表示反对:这解决了我的问题(我是OP)。我使用的是Doctrine,因此切换RDBMS既简单又快捷。此外,该网站是一些自制的CMS,流量很少,因此SQLite很好。

我知道这不是真正的问题“答案”,但是如果有人在相同的环境中: 糟糕的共享主机,您无法使用此奇怪的PDO-MySQL错误进行更改,
并且正在使用原则。这是一个解决方案。我可以删除此答案,但是如果我在OP时想到了这个答案,那么我会节省很多时间。

2020-05-17