如何在 PHP 中连接 MySQL 数据库
                           
天天向上
发布: 2025-06-28 13:13:00

原创
562 人浏览过

在 PHP 中连接 MySQL 数据库主要有两种主流方式:

  1. 使用 MySQLi(面向过程或面向对象)
  2. 使用 PDO(PHP Data Objects)(推荐,支持更多数据库)

以下是完整配置方法 + 示例代码 + 安全建议 + 权威文档链接,适用于本地开发或服务器部署(如 Mac、Linux、Windows、Docker 环境等)。


一、前提准备

你需要:

  • 已安装 PHP(建议 7.4+)
  • 已安装并启动 MySQL(或 MariaDB)
  • 拥有数据库连接信息:
  • 主机名(如 localhost
  • 用户名(如 root
  • 密码(如 root
  • 数据库名(如 testdb

如果你是 Docker 用户,可通过 docker-compose 启动 mysql 服务并连接到 db 容器。


二、方法一:使用 mysqli 连接(面向过程)

示例代码

<?php
$host = "localhost";
$user = "root";
$pass = "root";
$dbname = "testdb";

$conn = mysqli_connect($host, $user, $pass, $dbname);

if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

echo "✅ 成功连接到 MySQL 数据库!";

// 查询示例
$result = mysqli_query($conn, "SELECT * FROM users");
while ($row = mysqli_fetch_assoc($result)) {
    echo $row['name'] . "<br>";
}

mysqli_close($conn);

三、方法二:使用 PDO 连接(推荐)

示例代码(推荐用于现代开发)

<?php
$host = "localhost";
$dbname = "testdb";
$user = "root";
$pass = "root";

try {
    $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
    $pdo = new PDO($dsn, $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,  // 错误抛异常
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC  // 默认关联数组
    ]);

    echo "✅ 成功连接到 MySQL 数据库!";

    // 查询示例
    $stmt = $pdo->query("SELECT * FROM users");
    foreach ($stmt as $row) {
        echo $row['name'] . "<br>";
    }

} catch (PDOException $e) {
    echo "❌ 数据库连接失败: " . $e->getMessage();
}

四、MySQL 用户和数据库创建命令(命令行)

CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON testdb.* TO 'user1'@'localhost';
FLUSH PRIVILEGES;

五、连接参数说明

参数含义示例
host数据库主机名localhost / 127.0.0.1 / db(容器)
user登录用户名root / app_user
password登录密码123456
dbname连接的数据库名testdb
charset字符集(建议使用)utf8mb4

六、连接测试建议

  • 使用 phpinfo() 查看 mysqliPDO 是否启用
  • 使用 telnet localhost 3306 测试端口是否开启
  • Docker 用户需注意容器名称与网络连接(可用 host 为 db

七、安全建议

建议原因
使用 PDO 并开启异常模式便于错误捕获与调试
使用预处理语句防止 SQL 注入攻击
不暴露 root 用户于生产环境使用最小权限账号
不将密码硬编码使用 .env 环境文件或配置文件

八、权威参考链接


九、快速问题排查

问题原因与解决
Access denied for user用户或密码错误 / 未授权
Can't connect to MySQL serverMySQL 未运行 / 主机错误
Class 'PDO' not found没安装 PDO 扩展:brew install phpdocker-php-ext-install pdo
中文乱码设置 charset=utf8mb4 且数据库表使用相同编码

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *