PHP 简明教程

PHP 连接 MySQL

1. PHP 连接 MySQL 数据库

PHP 5 及更高版本可以通过以下两种扩展与 MySQL 数据库进行交互:

  • MySQLi 扩展("i" 代表 improved,即增强版)
  • PDO(PHP Data Objects,PHP 数据对象)

早期的 PHP 版本使用的是 MySQL 扩展,但该扩展已在 2012 年被弃用。

2. 应该使用 MySQLi 还是 PDO?

如果您需要一个快速的答案:两者皆可,取决于您的需求。

  • PDO 的优势:它支持 12 种不同的数据库系统。如果您打算将来更换数据库(例如从 MySQL 切换到 PostgreSQL 或 Oracle),使用 PDO 会非常简单,您只需要修改连接字符串和部分查询语句即可。
  • MySQLi 的优势:它仅针对 MySQL 数据库。如果您确定项目永远只使用 MySQL,那么 MySQLi 在性能上可能会有极其微弱的优势。

两者都支持预处理语句(Prepared Statements),这是防御 SQL 注入攻击的核心手段,对于 Web 安全至关重要。

3. MySQLi 面向对象连接示例

在面向对象编程中,我们通过实例化 mysqli 类来创建一个连接对象。

代码示例:

<?php
$servername = "localhost";
$username = "username";
$password = "password";

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

// 检查连接
if ($conn->connect_error) {
  die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
在上面的面向对象示例中,$conn->connect_error 在 PHP 5.2.9 和 5.3.0 之前的版本中不可用。如果需要兼容极旧版本,请使用 mysqli_connect_error()

4. MySQLi 过程式连接示例

如果您更习惯传统的函数调用方式,可以使用过程式接口。

代码示例:

<?php
$servername = "localhost";
$username = "username";
$password = "password";

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

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

5. PDO 连接示例

使用 PDO 连接数据库时,我们需要定义一个 DSN(数据源名称),并建议将其包裹在 try...catch 块中,以便优雅地处理连接异常。

代码示例:

<?php
$servername = "localhost";
$username = "username";
$password = "password";

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

6. 关闭连接

当脚本执行结束时,连接通常会自动关闭。但为了释放资源,良好的习惯是在完成操作后显式关闭连接。

6.1 MySQLi 面向对象关闭方式

$conn->close();

6.2 MySQLi 过程式关闭方式

mysqli_close($conn);

6.3 PDO 关闭方式

在 PDO 中,通过将连接对象设置为 null 来关闭连接:

$conn = null;