获取错误SQLSTATE [HY000] [2002]连接在NAS Synology上被拒绝

时间:2017-07-22 11:50:41

标签: php sql database pdo synology

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

访客可以订阅他们的电子邮件,并在网站可用时获得通知。

我在将数据库添加到数据库的数据库和PHP代码时遇到了问题。

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

  

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

如果是127.0.0.1127.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;

为什么我收到此错误?

6 个答案:

答案 0 :(得分:3)

我遇到了同样的问题:

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规范没有任何效果,但也没有给出错误消息。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

只是遇到了同样的问题,这就是我如何解决它。 我正在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/mysqldmysql10.sock
进行了更改,我在mariadb10属性中发现了这一点。 它对我来说非常糟糕,所以我希望它也会对其他人有所帮助:)

答案 3 :(得分:0)

它为我解决了什么

转到Synology Apps> MariaDB

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

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

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

答案 4 :(得分:0)

我有同样的问题。

我最终通过启用与端口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);

答案 5 :(得分: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);
  }
 ?>