PHP连接MySQL推荐使用mysqli或PDO扩展,二者均支持预处理语句以防止SQL注入。mysqli专用于MySQL,提供面向对象和过程式接口;PDO则支持多种数据库,具备更好的可移植性。两者都优于已废弃的旧mysql函数,因后者不支持预处理且存在安全缺陷。实际开发中应通过错误处理机制(如mysqli的connect_error或PDO的try-catch)捕获连接异常,并记录日志而非暴露敏感信息给用户。使用预处理语句能有效分离SQL逻辑与数据,提升安全性、性能和代码可维护性,尤其在处理用户输入时必须强制使用。无论选择哪种方式,均需养成绑定参数、正确处理结果集和及时关闭资源的良好习惯,以确保应用稳定可靠。

PHP连接MySQL数据库主要通过两种现代且官方推荐的扩展:
mysqli
PDO
在我看来,选择哪种方式,很多时候取决于个人的偏好和项目需求。但无论是
mysqli
PDO
1. 使用mysqli
mysqli
立即学习“PHP免费学习笔记(深入)”;
面向对象风格示例:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
// 实际项目中,这里通常会记录错误日志,而不是直接暴露给用户
die("连接失败: " . $conn->connect_error);
}
echo "连接成功!<br>";
// 执行查询
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出每行数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
// 关闭连接
$conn->close();
?>2. 使用PDO
PDO
PDO连接示例:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置PDO错误模式为异常,这样当出现错误时,PDO会抛出PDOException
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功!<br>";
// 执行查询
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
// 设置结果集为关联数组
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
// 遍历结果
while ($row = $stmt->fetch()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} catch(PDOException $e) {
// 同样,实际项目中要记录日志
echo "连接失败: " . $e->getMessage();
}
// PDO连接在脚本执行完毕后会自动关闭,也可以显式设置为null
$conn = null;
?>这是一个非常关键的问题,也是我常常在培训或代码审查中强调的重点。简单来说,旧的
mysql_
mysql_connect()
mysql_query()
但更深层次的原因在于安全性和功能性。旧的
mysql_
相比之下,
mysqli
PDO
mysqli
PDO
在实际开发中,数据库连接失败是常有的事,可能是数据库服务器没启动,也可能是用户名密码输错了,甚至网络波动都可能导致连接中断。妥善处理这些错误和异常,是保证应用健壮性的重要一环。
对于
mysqli
$conn->connect_error
mysqli_connect_error()
// mysqli 错误处理示例
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
error_log("MySQL连接失败: " . $conn->connect_error); // 记录到服务器错误日志
die("系统繁忙,请稍后再试。"); // 给用户友好的提示
}而
PDO
try-catch
PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
PDOException
catch
// PDO 异常处理示例
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// ... 其他数据库操作
} catch(PDOException $e) {
error_log("数据库操作失败: " . $e->getMessage()); // 记录日志
die("抱歉,数据库操作出现问题,请联系管理员。"); // 友好提示
}无论哪种方式,关键在于:不要将原始错误信息直接暴露给最终用户。这不仅不美观,更重要的是,它可能泄露敏感的数据库配置信息,给攻击者可乘之机。正确的做法是记录详细的错误日志(例如到文件或专门的日志服务),然后向用户显示一个通用的、友好的错误提示。
预处理语句是我认为现代PHP数据库编程中最重要的安全特性,没有之一。它的好处是多方面的,而且非常实际。
主要好处:
SELECT * FROM users WHERE username = ? AND password = ?
实践建议:
SELECT * FROM users WHERE id = ?
id
mysqli
bind_param()
i
s
d
b
PDO
mysqli
get_result()
bind_result()
PDO
fetch()
fetchAll()
mysqli
<?php
// ... 连接代码
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email); // "sss" 表示三个参数都是字符串
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
echo "新记录插入成功!";
$stmt->close();
// ... 关闭连接
?>PDO
<?php
// ... 连接代码
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)");
// 绑定命名参数
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
echo "新记录插入成功!";
// ... 关闭连接
?>无论是
mysqli
PDO
以上就是php如何连接到MySQL数据库?php连接MySQL数据库的方法与实践的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号