php连接mysql推荐使用pdo或mysqli扩展,禁用已废弃的mysql_*函数;需确保扩展启用、mysql运行及权限配置正确;pdo支持多数据库、预处理防注入,mysqli轻量适配mysql原生优化。

PHP 连接 MySQL 数据库的核心是建立安全、稳定、可复用的数据库通信通道。现代推荐方式是使用 PDO 或 MySQLi 扩展,彻底弃用已废弃的 mysql_* 函数。
准备前提:确认环境与权限
确保 PHP 已启用对应扩展(PDO 或 MySQLi),可通过 phpinfo() 查看;MySQL 服务正在运行;你拥有目标数据库的访问权限(用户名、密码、主机、端口、库名)。
- Linux/Mac 下常用命令:
php -m | grep pdo或php -m | grep mysqli - Windows 用户检查
php.ini中是否启用extension=pdo_mysql或extension=mysqli - 本地开发默认常见配置:主机
localhost,端口3306,用户root,密码为空或自设
使用 PDO 连接(推荐:支持多种数据库、预处理防注入)
PDO 提供统一接口,更安全、更灵活。连接时建议开启异常模式,便于错误排查。
SHOPEX简灰服装商城整站源码下载。 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.phpphp 数据库连接信息.4.登陆网站后台--清空缓存..5.删除bak文件夹 后台:shopadm
<?php
$host = 'localhost';
$dbname = 'testdb';
$user = 'root';
$pass = '';
try {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
echo "✅ 连接成功";
} catch (PDOException $e) {
die("❌ 连接失败: " . $e->getMessage());
}
?>
-
charset=utf8mb4确保正确支持 emoji 和所有 Unicode 字符 -
PDO::ATTR_EMULATE_PREPARES => false启用真正的预处理语句,增强安全性 - 连接对象
$pdo可全局复用,无需每次查询都新建
使用 MySQLi 面向对象方式(轻量、原生 MySQL 优化)
如果项目只用 MySQL,且偏好简洁语法,MySQLi 是可靠选择。注意区分面向对象和过程式写法,推荐前者。
立即学习“PHP免费学习笔记(深入)”;
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'testdb';
$mysqli = new mysqli($host, $username, $password, $database);
if ($mysqli->connect_error) {
die("❌ 连接失败: " . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
echo "✅ 连接成功";
?>
- 调用
set_charset('utf8mb4')避免中文乱码(不能仅靠连接字符串设置) - 后续查询可用
$mysqli->query()或$mysqli->prepare()执行 - 连接失败时,
$mysqli->connect_error和$mysqli->connect_errno提供具体信息
连接后基本操作示例(以 PDO 为例)
连接只是第一步,实际需执行查询、取数据、处理错误、安全释放资源。
<?php
// 假设 $pdo 已正确初始化
try {
// 查询数据
$stmt = $pdo->query("SELECT id, name FROM users LIMIT 5");
while ($row = $stmt->fetch()) {
echo "ID: {$row['id']}, Name: {$row['name']} <br>";
}
// 插入数据(预处理防 SQL 注入)
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(['张三', 'zhang@example.com']);
} catch (PDOException $e) {
error_log("SQL 错误: " . $e->getMessage());
echo "操作失败,请稍后重试";
}
?>
- 用
prepare + execute替代拼接 SQL,防止注入攻击 - 敏感操作建议记录错误日志(
error_log()),而非直接暴露给用户 - PHP 脚本结束时会自动关闭连接,一般无需手动
$pdo = null,除非长生命周期脚本










