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会在脚本结束时自动关闭)
- 考虑使用连接池来提高性能(在高流量应用中)