PHP 无法使用 mysqli_connect 连接到数据库

PHP can't connect to database with mysqli_connect

我遇到这个问题,当我尝试使用常量连接到数据库时,它在我的 VS 编辑器中显示:未定义常量 'DB_HOST'、'DB_USER'、'DB_PASS', 'DB_NAME'.

这是我的代码:

<?php

$db['db_host'] = "localhost";
$db['db_user'] = "root";
$db['db_pass'] = "";
$db['db_name'] = "cms";

foreach($db as $key => $value){
     define(strtoupper($key), $value);
}

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

?>

我试过改变

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$connection = mysqli_connect('DB_HOST', 'DB_USER', 'DB_PASS', 'DB_NAME');

完成此步骤后,我的本地主机显示以下错误:

警告:mysqli_connect():php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\xampp\htdocs\cms\includes\db.php 第 12 行

警告:mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo 失败:不知道这样的主机。在 C:\xampp\htdocs\cms\includes\db.php 第 12 行

你能帮我解决这个错误吗,或者告诉我我做错了什么

假设您在 Windows 上进行本地开发(MySQL/MariaDB 在 localhost 端口 3306 上可用),看起来您需要确定您使用的 IP 地址。在命令行中,尝试:

c:\>ping localhost

如果您的本地主机设置正确,您将看到如下响应:

Pinging localhost with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

或者,您可以检查以下 Windows 文件(假设您的主驱动器映射到 C):

C:\Windows\System32\drivers\etc\hosts

请注意,此文件没有扩展名,您需要成为 Windows PC 的管理员才能进行任何修改,因此请谨慎使用。

使用您的 ping 回复中所述的地址(即 127.0.0.1)- 如果您没有收到回复,则可能是某些东西阻止了访问。由于 Windows 组策略扰乱了我在本地的开发,我遇到了端口不断变化的问题,因此我不得不在稍微不方便的临时服务器上进行开发和测试。

如果您正在使用 XAMPP,请确保 MySQL 服务首先是 运行。检查 mysql_error.log 文件,看看它告诉你什么。

要找出您正在使用的端口(在 XAMPP 中),请从控制面板打开 my.ini 文件。通常在 Linux 上,此文件称为 my.cnf,可能位于 /etc/mysql/.

您的 MySQL 实例的端口在您的配置文件中指定如下:

port=3306

如果这不是设置为 3306 修改下面的脚本:

<?php
    $db = [
        'db_host' => '127.0.0.1', /* or the ip address for your localhost */
        'db_port' => '3306', /* or the port specified in your MySQL/MariaDb config file */
        'db_user' => 'root',
        'db_pass' => '',
        'db_name' => 'cms'
    ];

    $con = new mysqli($db['db_host'], $db['db_user'], $db['db_pass'], $db['db_name'], $db['db_port']);

    if ($error = mysqli_connect_error()) {
        echo '<pre>' . print_r($error, TRUE) . '</pre>';
    }

这似乎是 Visual Studio 代码的问题。该代码可以正常工作并连接到数据库,但显示 DB_HOST 等未定义,并带有一条弯曲的红色 'naughty' 行。所以我通过在没有循环或关联数组的情况下定义常量来消除警告。

define("DB_HOST", 'localhost');
define("DB_USER", 'root');
define("DB_PASS", '');
define("DB_NAME", 'cms');