PHP连接MySQL实战:从老旧扩展迁移到PDO/MySQLi指南

Dylan
Dylan
发布时间:2026-10-15 | 4人浏览过
原创

在PHP开发中,数据库操作是核心环节。本文将分析传统的MySQL连接方法,并详细演示如何使用更安全的PDO和MySQLi扩展来执行数据库连接、增删改查操作。

传统MySQL扩展的演变与局限

过去,PHP开发者常使用mysql_*系列函数(如mysql_connect、mysql_query)操作数据库。然而,这些函数存在几个显著问题:

  • 安全性不足:原生不支持预处理语句,容易导致SQL注入攻击。
  • 非持久性:mysql_pconnect虽提供持久连接,但管理复杂且易耗尽资源。
  • 已废弃:PHP 5.5起标记为弃用,PHP 7.0起完全移除。

因此,现代PHP项目必须转向PDO或MySQLi扩展。

推荐方案一:使用PDO连接数据库

PDO(PHP Data Objects)提供了一种统一的接口访问多种数据库,支持预处理语句,是PHP官方推荐的数据库访问层。

第1步:建立PDO连接

目的:创建到MySQL服务器的安全连接实例。

$dsn = 'mysql:host=localhost;dbname=MyDatabase;charset=utf8';
$username = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ]);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

第2步:执行查询并获取数据

目的:使用预处理语句防止SQL注入,并安全地提取结果。

// 插入数据示例
$stmt = $pdo->prepare('INSERT INTO MyTable (name, id) VALUES (:name, :id)');
$stmt->execute(['name' => 'CheneyFu', 'id' => 5]);
echo "新增记录影响行数: " . $pdo->lastInsertId() . "\n";

// 查询数据示例
$stmt = $pdo->query('SELECT name FROM MyTable WHERE id > 65');
while ($row = $stmt->fetch()) {
    echo "名称: {$row['name']}\n";
}

第3步:获取受影响行数

对于UPDATE、DELETE或INSERT操作,可使用PDOStatement::rowCount()确认执行结果:

$stmt = $pdo->prepare('UPDATE MyTable SET name = ? WHERE id >= 5');
$stmt->execute(['NewName']);
$count = $stmt->rowCount();
echo "更新了 $count 条记录";

备选方案二:使用MySQLi对象模式

如果确定仅使用MySQL数据库,MySQLi也是高性能的选择。它提供了面向对象和过程式两种API,本例以面向对象为主。

第1步:初始化MySQLi连接

$mysqli = new mysqli("localhost", "username", "password", "MyDatabase");
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

第2步:预处理与绑定参数

// 准备SQL语句
$stmt = $mysqli->prepare("INSERT INTO MyTable (id, name) VALUES (?, ?)");
$param_id = 5;
$param_name = 'TestUser';

// 绑定参数 (i=integer, s=string)
$stmt->bind_param("is", $param_id, $param_name);
$stmt->execute();

// 获取影响行数
echo "受影响行数: " . $stmt->affected_rows . "\n";

关键操作对比总结

功能旧版 mysql_* (已废弃)PDOMySQLi (面向对象)
连接mysql_connect()new PDO(...)new mysqli(...)
执行SQLmysql_query()$pdo->query() / prepare()$mysqli->query() / prepare()
获取单行mysql_fetch_row()$stmt->fetch(PDO::FETCH_ASSOC)$result->fetch_assoc()
获取所有行循环调用 fetch$stmt->fetchAll()循环调用 fetch
最近插入IDmysql_insert_id()$pdo->lastInsertId()$mysqli->insert_id
错误处理返回false抛出异常 (需try-catch)$mysqli->error

排错与维护建议

如果在迁移过程中遇到“Call to undefined function mysql_connect”错误,说明服务器运行的是PHP 7+版本,必须全部替换为PDO或MySQLi代码。此外,务必开启display_errors = Off并将错误记录至日志,避免将数据库细节暴露给前端用户。

简要总结

掌握现代PHP数据库连接方法是Web开发的必修技能。通过摒弃老旧的mysql_*函数,采用支持预处理的或MySQLi,不仅能消除安全隐患,还能提升应用的可维护性。以上就是PHP MySQL常用函数与现代化迁移的详细内容,更多关于PHP开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表