PHP MySQL 连接

在使用PHP操作MySQL数据库之前,首先需要建立与数据库的连接。PHP提供了两种主要的方式来连接MySQL数据库:MySQLi扩展和PDO(PHP数据对象)。

MySQLi连接方式

MySQLi扩展提供了面向对象和过程式两种API接口来连接MySQL数据库。

1. 面向对象方式连接MySQL

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

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

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

echo "连接成功";

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

2. 过程式方式连接MySQL

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

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

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

echo "连接成功";

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

PDO连接方式

PDO(PHP数据对象)提供了一个统一的接口,可以与多种数据库系统进行交互。

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

// 尝试连接数据库
try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    // 设置PDO错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}

// 关闭连接(PDO连接会在脚本结束时自动关闭)
$conn = null;
?>

连接参数说明

参数 描述 默认值
host 数据库服务器地址 localhost
username 数据库用户名 root(通常)
password 数据库密码 空(通常)
dbname 数据库名称(可选)
port 数据库端口(可选) 3306
charset 字符集(可选) utf8mb4(推荐)

连接到特定数据库

在连接MySQL时,可以直接指定要连接的数据库。

MySQLi方式

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

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

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

echo "连接到数据库成功";
?>

PDO方式

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// 尝试连接数据库
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password);
    // 设置PDO错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接到数据库成功";
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
?>

设置字符集

为了避免中文等非ASCII字符出现乱码,建议在连接数据库时设置正确的字符集。

MySQLi方式

<?php
// 创建连接后设置字符集
$conn->set_charset("utf8mb4");
?>

MySQLi与PDO的比较

特性 MySQLi PDO
数据库支持 仅支持MySQL 支持多种数据库(MySQL、PostgreSQL、Oracle等)
API风格 面向对象和过程式 仅面向对象
预处理语句 支持 支持,且更灵活
错误处理 混合使用错误码和异常 统一的异常处理机制
性能 略高 稍低但更灵活
可移植性 低(仅MySQL) 高(支持多种数据库)

选择哪种连接方式?

选择MySQLi还是PDO取决于您的项目需求:

  • 如果您只使用MySQL数据库,MySQLi可能是更好的选择,因为它是专为MySQL优化的。
  • 如果您可能需要切换到其他数据库,PDO是更好的选择,因为它提供了统一的接口。
  • 如果您更喜欢面向对象编程,两种方式都支持,但PDO的面向对象接口更加一致。
  • 如果安全性是首要考虑因素,两种方式都支持预处理语句,但PDO的实现更加灵活。

最佳实践

  • 将数据库连接信息存储在配置文件中,而不是硬编码在脚本中
  • 使用try/catch或错误检查来处理连接错误
  • 设置适当的字符集(如utf8mb4)以支持国际化字符
  • 在完成数据库操作后关闭连接(虽然PHP会在脚本结束时自动关闭)
  • 考虑使用连接池来提高性能(在高流量应用中)