gpt4 book ai didi

php - 令人困惑的仅 PDO 问题 : Can't connect through socket/Access denied/Can't connect to server (shared host)

转载 作者:IT老高 更新时间:2023-10-29 00:01:52 26 4
gpt4 key购买 nike

所以问题从原来的情况改变了,我将把原来的问题留在下面,以防止对答案的差评,就像有人编辑他的问题后我回答的那样:

所以我正在开发一个(非常蹩脚的)共享主机,它安装了 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';

确认。

本地主机重定向到 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) 

如果我用 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 的需要是因为我为这个网站使用了带有 Doctrine 的 Symfony 框架,而 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 问题 : Can't connect through socket/Access denied/Can't connect to server (shared host),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2138959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com