Php Mysqli_connect():(HY000/2002):在SYNOLOGY NAS上构建网站时拒绝连接

Php Mysqli_connect():(HY000/2002):在SYNOLOGY NAS上构建网站时拒绝连接,php,mysqli,mariadb,synology,Php,Mysqli,Mariadb,Synology,我将一个小型服务站点从AlterVista门户转移到我的NAS Synology,运行良好的代码现在不再在我的NAS上运行。从连接错误到错误。我已经读过你们的论坛上关于这个问题的文章,但这是另一个系统(不是一台pc,而是一个有自己应用程序的nas)。我正在使用端口3307,因为mariadb10正在该端口上侦听。(当mariadb 5监听端口3306时,您也可以检查) 在NAS上,我已经安装了MariaDB、PHP、PHP admin(与MariaDB连接良好)、Apache HTTP Serv

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

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


警告:mysqli::_construct():(HY000/2002):在第111行的>/volume1/web/listino.php中拒绝连接警告:mysqli::select_db():无法在第114行的/volume1/web/listino.php中获取mysqli>错误nella selezione del db

请试试这个

$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);

在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
]);

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

  • 打开(PHP核心设置端口3307而不是3306)

  • 在PHP代码中输入端口3307值

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


    mysqli\u connect(主机、用户名、密码、数据库名、端口、套接字)请遵循此操作,并在下面的注释中留空。还要检查您的连接是否在查询之前关闭或太早关闭。i、 e$db_连接->关闭();请不要使用PHP5。您也不应该使用Apache2.2。Apache 2.4可用。警告:mysqli_connect():(HY000/2002):在第120行的>/volume1/web/listino.php中拒绝连接致命错误:未捕获错误:调用>在/volume1/web/listino.php:126>堆栈跟踪:#0{main}中的布尔值上的成员函数select_db()在第126行的/volume1/web/listino.php中抛出。你能使用与我上面发布的代码相同的语法吗?;)这是为了不破坏代码。您的连接成功吗?你能和我分享一下120行吗?不,不行;120行:$db_connection=mysqli_connect($db_host、$db_user、$db_pass、$db_database、$db_port);致命错误,因为此时我们无法管理错误连接。在我的代码中,它是被管理的!!您是否相应地更改了数据库端口?mysqli_connect接受两个参数,第一个参数是db connection,第二个参数是像mysqli_select_db($db_connection,'db_name')这样的数据库名称。请花点时间阅读中的。堆栈溢出上的格式设置与其他站点不同。另外,看看您是否需要停止手动检查错误。请阅读:我稍微修正了你的答案,但我仍然觉得有点不清楚。我几乎看不出这与所讨论的代码之间有什么区别。还有,建议:不要在循环时使用
    。这可能会让人很困惑。尝试
    foreach($cicle作为$query查询)
    而不是为什么要回滚它?
    $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
    ]);
    
     <?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();