PHP连接MySQL对比:原生函数已废弃,PDO是推荐方案
在PHP开发中,连接MySQL数据库主要有两种路径:早期遗留的原生`mysql_`系列函数以及现代的PDO扩展。本文将通过实际操作演示这两种方式的代码差异与安全特性,帮助开发者做出正确选择。
环境准备与数据初始化
在编写PHP代码之前,需要准备一个包含基础测试数据的MySQL数据库。请确保你的开发环境中已安装MySQL并在终端或管理工具中执行以下SQL脚本:
- 创建数据库:创建名为
test的数据库。 - 创建表结构:建立
user表,包含姓名(varchar(50))和年龄(int)两个字段。 - 插入测试数据:模拟真实场景写入三条用户记录。
/*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ USE `test`; /*创建表*/ CREATE TABLE IF NOT EXISTS `user` ( name varchar(50), age int ); /*插入测试数据*/ INSERT INTO `user` (name, age) VALUES('harry', 20), ('tony', 23), ('harry', 24);
方法一:原生 MySQL 扩展连接(不推荐)
这是PHP早期的标准数据库连接方式。通过直接传递用户名和密码建立连接,并利用字符串拼接的方式构建SQL查询语句。
<?php $host = 'localhost'; $database = 'test'; $username = 'root'; $password = 'root'; $selectName = 'harry';//要查找的用户名 $connection = mysql_connect($host, $username, $password);//连接到数据库 mysql_query("set names 'utf8'");//设置字符集 if (!$connection) { die("could not connect to the database.\n" . mysql_error());//诊断连接错误 } $selectedDb = mysql_select_db($database);//选择数据库 if (!$selectedDb) { die("could not select the database\n" . mysql_error()); } $selectName = mysql_real_escape_string($selectName);//防止SQL注入 $query = "select * from user where name = '$selectName'";//构建查询语句 $result = mysql_query($query);//执行查询 if (!$result) { die("Query failed\n" . mysql_error()); } while ($row = mysql_fetch_row($result)) { $name = $row[0]; $age = $row[1]; echo "Name: $name "; echo "Age: $age \n"; }
结果输出:
Name: harry Age: 20
Name: tony Age: 23
这种方式虽然直观,但代码风格较为陈旧,且由于需要手动转义,在处理复杂逻辑时容易出错。
方法二:PDO 预处理连接(推荐)
PDO(PHP Data Objects)是一个为PHP提供轻量级接口的扩展。它通过预处理语句(Prepared Statements)和命名参数来处理查询,极大降低了SQL注入的风险,并且能更好地兼容多种数据库。
第1步:创建PDO对象并配置环境
目的:建立安全的底层连接通道。
动作:实例化 PDO 类,传入DSN及认证信息,并设置字符集以防止乱码。
<?php $dsn = "mysql:host=$host;dbname=$database;charset=utf8"; $username = 'root'; $password = 'root'; //创建一个pdo对象 $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//启用异常模式
第2步:构建与执行预处理查询
目的:安全地获取指定用户的查询结果。
动作:使用占位符 ? 代替实际输入值,并通过 execute() 绑定参数,彻底杜绝拼接导致的注入风险。
$sql = "select * from user where name = ?";
$stmt = $pdo->prepare($sql);
$rs = $stmt->execute(array($selectName));
if ($rs) {
// PDO::FETCH_ASSOC 关联数组形式
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['name'];
$age = $row['age'];
echo "Name: $name ";
echo "Age: $age \n";
}
}
$pdo = null;//关闭连接
最终输出的内容与方法一相同,但内部机制更加稳健。
总结
PHP内置的 mysql_* 扩展组已被彻底移除,不应再用于新项目。相比之下,使用 PDO 不仅语法更简洁,还能通过预处理机制保障数据安全。以上就是PHP连接MySQL不同方式的详细内容,更多关于PHP数据库教程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









