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');
我遇到这个问题,当我尝试使用常量连接到数据库时,它在我的 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');