关于php:获取错误SQLSTATE [HY000] [2002] NAS Synology上的连接被拒绝

Getting Error SQLSTATE[HY000] [2002] Connection refused on NAS Synology

我正在制作一个正在构建的页面,该页面托管在Synology NAS上。

访问者可以订阅他们的电子邮件,并在该网站何时可用时得到通知。

我无法使用将电子邮件添加到数据库的数据库和PHP代码。

如果服务器名称为localhost,则会出现以下错误:

SQLSTATE[HY000] [2002] No such file or directory

当它是127.0.0.1127.0.0.1:3306时,出现以下错误:

SQLSTATE[HY000] [2002] Connection refused

我在Stackoverflow上找不到解决方案。

此处是PHP代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$servername ="localhost";
$username   ="id";
$password   ="password";
$dbname     ="dbname";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password );
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $sql ="INSERT INTO email ( email ) VALUES ( '$email' )";

    $conn->exec( $sql );
    echo"New record created successfully";
}

catch( PDOException $e )
{
    echo $sql ."" . $e->getMessage();
}
$conn = null;

为什么会出现此错误?


我遇到了同样的问题:

1
SQLSTATE[HY000] [2002] Connection refused

尝试从php连接到在Synology NAS上运行的MariaDB数据库时。仅提供用户名和密码

1
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password );

不起作用,虽然指定了端口号,但其他地方都找不到解决方案:

1
$conn = new PDO("mysql:host=$servername;port=3307;dbname=$dbname", $username, $password );

对我有用的是什么:

1
$conn = new PDO("mysql:host=$servername:3307;dbname=$database", $login, $password);

从Synology NAS上的主菜单打开MariaDB 10属性窗口时,将找到端口名称。
显然,port=3307规范没有任何作用,但是也没有给出错误消息。


我有答案,连接被拒绝,因为我在汉字女巫上安装了mariaDB,将MySQL的默认端口从3306更改为3307。


我有同样的问题。

我最终通过启用与端口3307的TCP / IP连接来解决它。您可以通过在Synology Package Center中打开MariaDB 10选项来做到这一点。

然后代替:
mysqli_connect(" 127.0.0.1 "," root ",",DB_NAME);

我将端口号附加为第五个参数:
mysqli_connect(" 127.0.0.1 "," root ",",DB_NAME,3307);


为我修复的问题。

转到Synology Apps> MariaDB

确保在端口3306上方启用了"启用TCP / IP连接"。
记下域套接字:/run/mysqld/mysqld10.sock

以及上面的评论。
在网站> PHP设置>编辑>核心选项卡中
搜索>套接字

将域套接字示例/run/mysqld/mysqld10.sock输入到default_sockets


遇到了同样的问题,这就是我的解决方法。
我正在DSM 6.2.2-24922 Synology Diskstation上运行,我使用Nginx,PHP 5.6和MariaDB 10(和phpmyadmin)安装了Webstation。

我发现的解决方法是首先在php配置中激活pdo_mysql扩展。

然后在"核心"选项卡中查找pdo_mysql.default_socket。

默认情况下,我有

1
/tmp/mysql.sock

,但是我用

1
/run/mysqldmysql10.sock

更改了它,我在mariadb10属性中找到了它。
它对我来说非常糟糕,所以我希望它也会对其他人有所帮助:)