出现错误 SQLSTATE[HY000] [2002] NAS Synology 上的连接被拒绝

问题描述 投票:0回答:7

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

访问者可以使用电子邮件订阅并在网站可用时收到通知。

我在将电子邮件添加到数据库的数据库和 PHP 代码方面遇到问题。

如果服务器名称是

localhost
,我会收到以下错误:

SQLSTATE[HY000] [2002] 没有这样的文件或目录

当它是

127.0.0.1
127.0.0.1:3306
时,我收到以下错误:

SQLSTATE[HY000] [2002] 连接被拒绝

我在 Stackoverflow 上还没有找到解决方案。

这里是 PHP 代码:

<?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 . "<br>" . $e->getMessage();
}
$conn = null;

为什么我会收到此错误?

php sql database pdo synology
7个回答
5
投票

我也遇到了同样的问题:

SQLSTATE[HY000] [2002] Connection refused

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

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

不起作用,在指定端口号时,在其他地方找到的解决方案也不起作用:

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

什么对我有用:

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

从 Synology NAS 的主菜单打开 MariaDB 10 属性窗口时可以找到端口名称。 显然,

port=3307
规范没有任何效果,但也没有给出错误消息。


3
投票

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


2
投票

我也有同样的问题。

我最终通过启用端口 3307 的 TCP/IP 连接来解决这个问题。您可以通过在 Synology 套件中心打开 MariaDB 10 选项来完成此操作。

然后改为: mysqli_connect("127.0.0.1", "root", "", DB_NAME);

我在其中附加了端口号作为第五个参数: mysqli_connect("127.0.0.1", "root", "", DB_NAME, 3307);


1
投票

什么为我解决了这个问题。

进入 Synology Apps > MariaDB

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

正如上面的评论。
在 Web Station > PHP 设置 > 编辑 > 核心选项卡中 搜索 > 插座

在default_sockets中输入域套接字示例/run/mysqld/mysqld10.sock


1
投票

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

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

然后进入 Core 选项卡并查找 pdo_mysql.default_socket

默认情况下,我有

/tmp/mysql.sock
,但我用
/run/mysqld/mysql10.sock
更改了它,我在mariadb10属性中找到了它。 它对我来说非常有效,所以我希望它也能对其他人有所帮助:)


0
投票

我没有找到综合答案,但设法用以前的答案和其他线程解决了我的问题。

作为潜在的备忘录:

  • 群晖 (DSM >=7)
  • 在以下位置启用 PHP 扩展:网站 > PHP 参数
  • 启用 TCP/IP:Maria DB > 启用
  • 首选 IP 地址:127.0.0.1 而非 localhost;

这是一个测试片段,

<?PHP
  $dsn = "mysql:host=127.0.0.1:3307;dbname=XXX";
  $username = "XXX";
  $password = "XXXXX";


  try {
      $pdo = new PDO($dsn, $username, $password);
  } catch(PDOException $e) {
    die($e);
  }

  $stmt = $pdo->prepare("SELECT * FROM user WHERE XXX = 'XXX'");
  $stmt->execute();
  while($row = $stmt->fetch()) {
    print_r($row);
  }
 ?>

0
投票

进入目录:

cd /var/packages/MariaDB10/etc

重命名您的 my.cnf 文件

mv my.cnf my_backup.cnf

启动数据库服务器

/usr/syno/bin/synopkg start MariaDB10

恢复 my.cnf 文件以前的名称

mv my_backup.cnf my.cnf

重新启动数据库服务器

/usr/syno/bin/synopkg restart MariaDB10

检查数据库是否正在运行

© www.soinside.com 2019 - 2024. All rights reserved.