【问题标题】:Mysqli_connect(): (HY000/2002): Connection refused in Website Building ON SYNOLOGY NASMysqli_connect(): (HY000/2002): 在 SYNOLOGY NAS 上建立网站时连接被拒绝
【发布时间】:2021-01-26 15:10:35
【问题描述】:

我将一个小型服务站点从 AlterVista 门户转移到我的 NAS Synology,运行良好的相同代码现在不再在我的 NAS 上运行。从连接错误到 MariaDB。我已经阅读了有关此问题的论坛,但这是另一个系统(不是 pc,而是具有自己的应用程序的 nas)。我正在使用端口 3307,因为 mariadb10 正在侦听该端口。 (而mariadb 5正在监听3306端口也可以查看)

在 NAS 上,我已经安装了 MariaDB、PHP、PHP admin(可以很好地连接到 mariadb)、Apache HTTP Server 2.2,以及所有需要安装 PHP 5,7 的驱动程序和选项(mysqli、pdo 驱动程序、和其他选项)。

<?php
error_reporting(E_ALL);

$USERNAME = "root";
$PASSWORD = "xxxxxxx";  //null  
$DBSERVER = "127.0.0.1:3307";   //127.0.0.1:3306  mariadb5
$DBNAME = "miodb";

if(!($db_connection = new mysqli($DBSERVER, $USERNAME, $PASSWORD, $DBNAME)))
   die('Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);

if(!($db_selection = $db_connection->select_db($DBNAME)))
   die ("Errore nella selezione del DB.");

$query = $db_connection->query("SELECT * FROM MATERIALE");
while($cicle=$query->fetch_array(MYSQLI_ASSOC)){
    $url=$cicle['FOTO'];
    echo "<tr>
              <td>".$cicle['CODICEARTICOLO']."</td>
              <td><img src='".$url."' width='50' height='50' /> </td>
              <td>".$cicle['DESCRIZIONE']."</td>
              <td>".$cicle['PREZZO']." Euro</td>
          </tr>";
}
$query->close();
$db_connection->close();
?>

警告:mysqli::__construct(): (HY000/2002): Connection denied in >/volume1/web/listino.php on line 111 警告: mysqli::select_db(): Couldn't fetch mysqli >in / volume1/web/listino.php 第 114 行 Errore nella selezione del DB。

【问题讨论】:

  • mysqli_connect(host, username, password, dbname, port, socket) 请按照这个
  • 留空跟随下面的评论。还要检查您的连接不应该在查询之前或过早关闭。即 $db_connection->close();
  • 请不要使用 PHP 5。您也不应该使用 Apache 2.2。有 Apache 2.4 可用。

标签: php mysqli mariadb synology


【解决方案1】:

请试试这个

$db_host        = '127.0.0.1';
$db_user        = 'root';
$db_pass        = '';
$db_database    = 'database_name';
$db_port        = '3306';

$connection = mysqli_connect($db_host,$db_user,$db_pass,$db_database,$db_port);

【讨论】:

  • 警告:mysqli_connect(): (HY000/2002): Connection denied in >/volume1/web/listino.php on line 120 致命错误:未捕获错误:调用 >a 成员函数 select_db()在 /volume1/web/listino.php:126 中的布尔值上>堆栈跟踪:#0 {main} 在第 126 行的 /volume1/web/listino.php 中抛出。你能使用与我上面发布的代码相同的语法吗? ;) 这是为了不破坏代码。
  • 你的连接成功了吗?可以和我分享一下第 120 行吗?
  • 不,它没有;120 行:$db_connection = mysqli_connect($db_host,$db_user,$db_pass,$db_database,$db_port);致命错误,因为此时我们无法管理错误连接。在我的代码中它是管理的!
  • 您是否相应地更改了您的数据库端口?
  • mysqli_connect 接受两个参数,第一个是数据库连接,第二个是数据库的名称,如 mysqli_select_db($db_connection , 'db_name')
【解决方案2】:

我在图形控制台 Synology Nas 中进行了修改:

  1. on(PHP 核心设置端口 3307 而不是 3306)。

  2. 在 PHP 代码端口 3307 值。

  3. 在 3307 上的 TCP/IP 端口设置上启用 maria db10 标志(默认)

     <?php
    
     error_reporting(E_ALL);
    
     $USERNAME = "root";
     $PASSWORD = "password"; //null X
     $DBSERVER = "127.0.0.1";    //127.0.0.1:3306
     $DBNAME = "miodb";
     $DB_PORT = '3307';
     $SOCKET = "/run/mysqld/mysqld10.sock";   //not necessary
    
     $db_connection = new mysqli($DBSERVER, $USERNAME, $PASSWORD, $DBNAME, $DB_PORT);
    
     $query = $db_connection->query("SELECT * FROM MATERIALE");
     while ($cicle = $query->fetch_array(MYSQLI_ASSOC)) {
         $url = $cicle['FOTO'];
         echo "<tr>
                 <td>" . $cicle['CODICEARTICOLO'] . "</td>
                 <td><img src='" . $url . "' width='50' height='50' /> </td>
                 <td>" . $cicle['DESCRIZIONE'] . "</td>
                 <td>" . $cicle['PREZZO'] . " Euro</td>
             </tr>";
     }
     $query->close();
     $db_connection->close();
    

【讨论】:

【解决方案3】:

在 Synology NAS 上连接到 MariaDB 时,您需要提供所有六个参数。第六个参数是你应该使用的套接字名称。

mysqli 连接的正确代码是这样的:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// Please do not connect as root!
$mysqli = new mysqli('localhost', 'root', 'password', 'miodb', 3307, '/run/mysqld/mysqld10.sock');
$mysqli->set_charset('utf8mb4'); // always set the charset

如果您只是从 PHP 开发开始,那么我建议您学习 PDO 而不是 mysqli。使用 PDO,您可以这样连接:

$pdo = new PDO("mysql:host=localhost;dbname=miodb;charset=utf8mb4;unix_socket=/run/mysqld/mysqld10.sock", 'root', 'password', [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false
]);

【讨论】:

    猜你喜欢
    • 2017-12-28
    • 2015-03-10
    • 2020-02-08
    • 1970-01-01
    • 2017-07-12
    • 2021-07-10
    • 2018-03-05
    • 2020-05-23
    • 2020-06-21
    相关资源
    最近更新 更多