当前位置: 首页 > 面试题库 >

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

阴培
2023-03-14
问题内容

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

因此,我正在安装(确实很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 …我不想从头开始重做网站!

谢谢你的帮助 !


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我让ELK堆栈在VM内的docker容器中运行。 我可以向ES填充,它可以在Kibana中显示。 我可以使用Logstash读取文件并将其输出到stdout。 但是Logstash无法将数据发送到ES (启用或禁用xpack似乎没有什么不同) 输出 之后,它会在“发送批量请求”,“执行运行状况检查”,“尝试复活”和“意外的池错误”之间保持循环。 随着每一次的同时,我也看到了 问题答案:

  • 每次运行Rails4.0服务器时,都会得到这个输出。 我正在运行小牛OS X10.9,所以我不知道这是不是问题所在。我已经试了我能试的一切,但似乎都没有效果。我已经卸载并安装了postgres和pg gem多次了。 这是我的database.yml文件

  • 问题内容: 我正在尝试使用Flask在Raspberry Pi上运行一个简单的Web服务器。当我运行Flask应用程序时,它说: 在http://127.0.0.1:5000/上运行 但是,当我在笔记本电脑的Chrome中输入此地址时, ERR_CONNECTION_REFUSED 我可以在Raspberry Pi的浏览器上打开127.0.0.1:5000。我需要怎么做才能从另一台计算机连接? 问

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过

  • 我有一个用C#编写的应用程序,它确实与数据库连接。 下面是我得到的错误: 警告:mysql_connect()[function.mysql connect]:第15行(php文件)中用户“用户名”@“本地主机”(使用密码:是)的访问被拒绝无法连接:用户“用户名”@“本地主机”(使用密码:是)的访问被拒绝 这是我的密码: 我从以下方面得到了这个例子: http://php.net/manual/e

  • 这让我很困惑。 我有一个运行nginx-php-fpm的本地开发设置,我在其中使用.localhost作为每个项目的工作域。昨天Chrome停止了与本地域的合作。相反,它只是返回被拒绝的连接。DevTools将错误显示为net::ERR\u CONNECTION\u RESET。 访问http://127.0.0.1工作,但当然不适用于本地项目。 Safari继续与.localhost一起工作。