Skip to content

12.1 连接数据库 mysqli_connect

mysqli 扩展介绍

mysqli(MySQL Improved)是 PHP 中用于与 MySQL 数据库交互的扩展,提供了更强大、更安全的数据库操作功能。

连接数据库的步骤

1. 准备连接参数

  • 主机名:通常是 localhost
  • 用户名:MySQL 的用户名,如 root
  • 密码:MySQL 的密码
  • 数据库名:要连接的数据库名称
  • 端口:MySQL 服务的端口,默认是 3306

2. 使用 mysqli_connect 函数

php
<?php
// 连接参数
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$port = 3306;

// 连接数据库
$conn = mysqli_connect($host, $user, $password, $dbname, $port);

// 检查连接是否成功
if (!$conn) {
    die('数据库连接失败: ' . mysqli_connect_error());
}

echo '数据库连接成功!';

// 关闭连接
mysqli_close($conn);
?>

3. 使用面向对象方式

php
<?php
// 连接参数
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$port = 3306;

// 面向对象方式连接
$conn = new mysqli($host, $user, $password, $dbname, $port);

// 检查连接是否成功
if ($conn->connect_error) {
    die('数据库连接失败: ' . $conn->connect_error);
}

echo '数据库连接成功!';

// 关闭连接
$conn->close();
?>

连接配置

1. 字符集设置

为了避免乱码,应该在连接后设置字符集:

php
//  procedural 风格
mysqli_set_charset($conn, 'utf8mb4');

// 面向对象风格
$conn->set_charset('utf8mb4');

2. 错误处理

php
<?php
// 启用错误报告
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $conn = new mysqli('localhost', 'root', '', 'test');
    $conn->set_charset('utf8mb4');
    echo '数据库连接成功!';
} catch (mysqli_sql_exception $e) {
    die('数据库连接失败: ' . $e->getMessage());
}
?>

连接池

对于高并发应用,可以考虑使用连接池来提高性能:

php
<?php
class Database {
    private static $instance = null;
    private $conn;
    
    private function __construct() {
        $host = 'localhost';
        $user = 'root';
        $password = '';
        $dbname = 'test';
        
        $this->conn = new mysqli($host, $user, $password, $dbname);
        $this->conn->set_charset('utf8mb4');
        
        if ($this->conn->connect_error) {
            die('数据库连接失败: ' . $this->conn->connect_error);
        }
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    public function getConnection() {
        return $this->conn;
    }
    
    public function __destruct() {
        if ($this->conn) {
            $this->conn->close();
        }
    }
}

// 使用示例
$db = Database::getInstance();
$conn = $db->getConnection();
echo '数据库连接成功!';
?>

配置文件

为了方便管理,建议将数据库连接参数放在配置文件中:

config.php

php
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'test');
define('DB_PORT', 3306);
define('DB_CHARSET', 'utf8mb4');
?>

db.php

php
<?php
require_once 'config.php';

function getDbConnection() {
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
    
    if ($conn->connect_error) {
        die('数据库连接失败: ' . $conn->connect_error);
    }
    
    $conn->set_charset(DB_CHARSET);
    return $conn;
}

// 使用示例
$conn = getDbConnection();
echo '数据库连接成功!';
$conn->close();
?>

常见错误及解决方法

1. 连接被拒绝

错误信息Connection refused

解决方法

  • 检查 MySQL 服务是否启动
  • 检查主机名和端口是否正确
  • 检查防火墙是否阻止连接

2. 访问被拒绝

错误信息Access denied for user 'root'@'localhost'

解决方法

  • 检查用户名和密码是否正确
  • 检查用户是否有访问权限

3. 数据库不存在

错误信息Unknown database 'test'

解决方法

  • 检查数据库名称是否正确
  • 确保数据库已经创建

4. 字符集问题

错误信息:乱码

解决方法

  • 设置正确的字符集,如 utf8mb4
  • 确保数据库表使用相同的字符集

最佳实践

  1. 使用配置文件:将连接参数放在配置文件中,方便管理
  2. 错误处理:使用 try-catch 或错误检查处理连接错误
  3. 字符集设置:始终设置正确的字符集
  4. 关闭连接:操作完成后关闭数据库连接
  5. 使用预处理语句:防止 SQL 注入攻击
  6. 连接池:对于高并发应用,使用连接池提高性能

练习

  1. 创建一个数据库连接脚本,连接到 MySQL 数据库
  2. 处理连接错误,显示友好的错误信息
  3. 设置正确的字符集
  4. 关闭数据库连接
  5. 创建一个数据库连接类,实现单例模式

© 2026 编程马·菜鸟教程 版权所有