在PHP网页中连接数据库是动态网站开发的核心环节,它允许网页与数据库进行交互,实现数据的存储、查询、更新和删除等功能,PHP支持多种数据库类型,如MySQL、PostgreSQL、SQLite等,其中MySQL是最常用的选择,本文将详细介绍如何在PHP网页中连接MySQL数据库,包括环境准备、连接方式、常见操作及注意事项。

环境准备与配置
在开始连接数据库之前,确保开发环境已正确配置,需要安装PHP环境,推荐使用集成开发环境如XAMPP、WAMP或MAMP,这些工具已预装PHP和MySQL服务器,确保MySQL服务已启动,并创建一个数据库和用于连接的用户,可以通过MySQL命令行或phpMyAdmin创建一个名为testdb的数据库,并授予用户user密码为password的访问权限。
使用MySQLi扩展连接数据库
PHP提供了MySQLi(MySQL Improved)扩展来操作MySQL数据库,它支持面向过程和面向对象两种方式,以下是面向对象方式的连接示例:
$servername = "localhost";
$username = "user";
$password = "password";
$dbname = "testdb";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
这段代码首先定义了数据库的连接参数,然后使用mysqli类创建连接对象,通过connect_error属性检查连接是否成功,如果失败则输出错误信息并终止脚本。
使用PDO扩展连接数据库
PDO(PHP Data Objects)是另一种数据库访问抽象层,支持多种数据库类型,使用PDO连接MySQL的示例如下:
$dsn = "mysql:host=localhost;dbname=testdb";
$username = "user";
$password = "password";
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch (PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
PDO的优势在于其可移植性和预处理语句的支持,能有效防止SQL注入攻击,通过setAttribute方法设置错误模式为ERRMODE_EXCEPTION,确保在发生错误时抛出异常。
执行SQL查询
连接数据库后,可以执行各种SQL查询,以MySQLi为例,以下是一个简单的查询示例:
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}
} else {
echo "0 结果";
}
这段代码执行了一条查询语句,并通过fetch_assoc方法逐行获取结果,PDO的查询方式略有不同,需使用query和fetch方法:

$stmt = $pdo->query("SELECT id, name FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}
使用预处理语句防止SQL注入
预处理语句是防止SQL注入攻击的重要手段,以PDO为例,预处理语句的使用方法如下:
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$name = "John Doe";
$email = "john@example.com";
$stmt->execute();
通过绑定参数,确保用户输入不会被解释为SQL代码,从而提高安全性。
关闭数据库连接
完成数据库操作后,应关闭连接以释放资源,MySQLi的关闭方法为:
$conn->close();
PDO的关闭方法为:
$pdo = null;
常见错误与调试
在连接数据库时,可能会遇到各种错误,如连接超时、认证失败或数据库不存在,建议开启PHP的错误报告功能,并在开发环境中显示详细的错误信息:
error_reporting(E_ALL);
ini_set('display_errors', 1);
确保数据库用户具有足够的权限,并且数据库服务器允许来自PHP运行环境的连接。
安全注意事项
数据库连接的安全性至关重要,避免在代码中硬编码数据库凭据,建议使用配置文件或环境变量存储敏感信息,定期更新PHP和MySQL版本,以修复已知的安全漏洞。

在PHP网页中连接数据库需要正确配置环境、选择合适的扩展(如MySQLi或PDO),并遵循安全的编程实践,通过本文介绍的方法,开发者可以轻松实现PHP与数据库的交互,构建功能强大的动态网站。
FAQs
Q1: 如何解决PHP连接数据库时出现的“Access denied”错误?
A1: 该错误通常是由于数据库用户名或密码错误,或用户权限不足所致,请检查连接参数是否正确,并确保MySQL用户已授予对目标数据库的访问权限,可以通过以下SQL语句授予权限:
GRANT ALL PRIVILEGES ON testdb.* TO 'user'@'localhost'; FLUSH PRIVILEGES;
Q2: 为什么使用PDO预处理语句能防止SQL注入?
A2: 预处理语句将SQL语句和数据分开处理,数据库引擎会先编译SQL语句,再将数据作为参数传递,这样,即使用户输入包含恶意SQL代码,也会被当作普通数据处理,而不会被执行,从而有效防止SQL注入攻击。