PHP 连接到 MySQL
PHP 5 及更高版本可以使用以下方式处理 MySQL 数据库:
- MySQLi 扩展("i" 代表 improved,即改进版)
- PDO(PHP Data Objects)
早期版本的 PHP 使用了 MySQL 扩展。但是,该扩展已于 2012 年弃用。
我应该使用 MySQLi 还是 PDO?
如果需要简短的答案,那就是“随便你”。
MySQLi 和 PDO 都有各自的优点
PDO 可用于 12 种不同的数据库系统,而 MySQLi 只能与 MySQL 数据库配合使用。
因此,如果需要将项目切换到使用另一个数据库,PDO 可以轻松完成。你只需要更改连接字符串和一些查询。使用 MySQLi,你需要重写整个代码,包括查询。
两者都是面向对象的,但 MySQLi 还提供过程式 API。
两者都支持预处理语句。预处理语句可以防止 SQL 注入,并且对于 Web 应用程序安全非常重要。
MySQLi 和 PDO 语法的 MySQL 示例
在本章及后续章节中,我们将演示使用 PHP 和 MySQL 的三种方法:
- MySQLi(面向对象)
- MySQLi(过程式)
- PDO
MySQLi 安装
对于 Linux 和 Windows:在大多数情况下,当安装了 php5 mysql 包时,MySQLi 扩展会自动安装。
有关安装详细信息,请访问: https://php.ac.cn/manual/en/mysqli.installation.php
PDO 安装
有关安装详细信息,请访问: https://php.ac.cn/manual/en/pdo.installation.php
打开与 MySQL 的连接
在访问 MySQL 数据库中的数据之前,我们需要能够连接到服务器。
示例(MySQLi 面向对象)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "Connected successfully";
?>
上面面向对象的示例说明
$connect_error 在 PHP 5.2.9 和 5.3.0 之前是无效的。如果你需要确保与 5.2.9 和 5.3.0 之前的 PHP 版本兼容,请使用以下代码代替:
// 检查连接
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}
示例(MySQLi 过程式)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检查连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
示例(PDO)
<?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 "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
注意: 在上面的 PDO 示例中,我们还**指定了一个数据库 (myDB)**。PDO 需要一个有效的数据库才能连接。如果未指定数据库,将抛出异常。
提示: PDO 的一个巨大好处是它有一个异常类来处理数据库查询中可能发生的任何问题。如果在 try{ } 块中抛出异常,脚本将停止执行并直接跳转到第一个 catch(){ } 块。
关闭连接
脚本结束时连接将自动关闭。要提前关闭连接,请使用以下方法:
MySQLi 面向对象
$conn->close();
MySQLi 过程式
mysqli_close($conn);
PDO
$conn = null;