PHP 连接 MySQL 的方式详解
                           
天天向上
发布: 2025-03-22 00:02:48

原创
198 人浏览过

在 PHP 中,可以使用以下三种主要方式连接 MySQL 数据库:

MySQLi(MySQL Improved)

  • 适用于 MySQL 数据库。
  • 支持面向过程面向对象两种风格。
  • 提供预处理语句,提高安全性,防止 SQL 注入。

PDO(PHP Data Objects)

  • 适用于多种数据库(MySQL、PostgreSQL、SQLite 等)。
  • 仅支持面向对象风格。
  • 预处理语句功能更强,推荐使用。

MySQL 扩展(已废弃)

  • mysql_connect() 在 PHP 5.5 版本开始废弃,PHP 7 及以上版本不再支持。
  • 不建议使用!

1. 使用 MySQLi 连接 MySQL

1.1 过程化风格连接 MySQL

<?php
$servername = "localhost"; // 服务器地址
$username = "root";        // MySQL 用户名
$password = "";            // MySQL 密码
$database = "testdb";      // 数据库名称

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $database);

// 检测连接是否成功
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
echo "连接成功";
?>

1.2 面向对象风格连接 MySQL

<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "testdb";

// 创建连接
$conn = new mysqli($servername, $username, $password, $database);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>

1.3 关闭 MySQL 连接

mysqli_close($conn); // 过程化
$conn->close();      // 面向对象

2. 使用 PDO 连接 MySQL(推荐)

PDO(PHP Data Objects)是一个数据库抽象层,支持多种数据库类型,如 MySQL、PostgreSQL、SQLite 等。

2.1 使用 PDO 连接 MySQL

<?php
$dsn = "mysql:host=localhost;dbname=testdb;charset=utf8mb4";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // 启用异常模式
    ]);
    echo "连接成功";
} catch (PDOException $e) {
    die("连接失败: " . $e->getMessage());
}
?>

2.2 关闭 PDO 连接

$pdo = null;

3. 连接 MySQL 时的常见错误与解决方案

3.1 连接超时或拒绝访问

  • 错误信息
  Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
  • 解决方案
  • 检查 MySQL 账号密码是否正确。
  • 检查 MySQL 是否允许远程访问。
  • 检查防火墙是否阻挡 3306 端口(默认 MySQL 端口)。

3.2 数据库不存在

  • 错误信息
  Warning: mysqli_connect(): (HY000/1049): Unknown database 'testdb'
  • 解决方案
  • 使用 SHOW DATABASES; 检查数据库是否存在:
    sql SHOW DATABASES;
  • 使用 CREATE DATABASE testdb; 创建数据库。

3.3 编码问题(中文乱码)

  • 解决方案
    在连接 MySQL 时,指定 utf8mb4 编码:
  mysqli_set_charset($conn, "utf8mb4");

或者在 PDO 连接字符串中添加 charset=utf8mb4


4. MySQL 连接方式对比总结

方式兼容性语法风格预处理支持多数据库支持推荐使用
MySQLi仅限 MySQL面向过程 & 面向对象✅ 支持❌ 仅限 MySQL推荐用于 MySQL 项目
PDO多种数据库仅面向对象✅ 支持✅ 支持 MySQL、PostgreSQL、SQLite 等强烈推荐
MySQL 扩展(已废弃)仅限 MySQL面向过程❌ 不支持❌ 仅限 MySQL不推荐(已被移除)

5. 相关链接(深入学习)

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

发表回复 0

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