php代码示例怎样连接mysql数据库_php连接mysql数据库代码示例【示例】
发布时间 - 2026-02-02 00:00:00 点击率:次PHP 8.0+ 已移除 mysql_connect(),必须改用 mysqli 或 PDO;推荐 PDO(跨库、命名参数、异常模式)或 mysqli 面向对象(预处理、异常支持);务必设置 utf8mb4 字符集和错误报告机制。
PHP 8.0+ 已彻底移除 mysql_connect() 等旧函数,直接用会报 Fatal error: Uncaught Error: Call to undefined function mysql_connect() —— 必须改用 mysqli 或 PDO。
用 mysqli 面向过程方式连接(适合快速脚本)
这是最接近老式 mysql_* 写法的替代方案,改动小、上手快,但不推荐用于新项目。
-
mysqli_connect()第一个参数是主机名(如'localhost'),不是'127.0.0.1'—— 后者可能触发 TCP 连接而非 socket,某些配置下反而连不上 - 连接后务必检查返回值:
if (!$conn) { die('连接失败:' . mysqli_connect_error()); } -
中文乱码?在连接后立即执行
mysqli_set_charset($conn, 'utf8mb4');(注意是utf8mb4,不是utf8)
```php
$conn = mysqli_connect('localhost', 'root', 'password', 'testdb', 3306);
if (!$conn) {
die('连接失败:' . mysqli_connect_error());
}
mysqli_set_charset($conn, 'utf8mb4');
```用 mysqli 面向对象方式(推荐)
更清晰、支持预处理语句防

mysqli_report)。
- 构造时传参顺序和面向过程一致,但需用
new mysqli(...) - 连接失败时默认不抛异常,要先开启报告:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); - 数据库名可为空,后续用
$mysqli->select_db('dbname')切换,适合多库场景
```php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'root', 'password', 'testdb', 3306);
$mysqli->set_charset('utf8mb4');
```用 PDO 连接(最灵活,跨数据库友好)
如果你未来可能换 PostgreSQL 或 SQLite,或者需要命名参数(:name)、事务嵌套控制,PDO 是首选。
- DNS 字符串格式为
mysql:host=localhost;dbname=testdb;charset=utf8mb4——charset必须写在 DNS 里,单独调exec("SET NAMES utf8mb4")不可靠 - 错误模式设为
PDO::ERRMODE_EXCEPTION,否则query()失败只返回false,不报错 - 密码等敏感信息别硬编码,应从环境变量读取:
$_ENV['DB_PASSWORD']或getenv('DB_PASSWORD')
```php
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'root', 'password', $options);
```真正容易被忽略的是字符集和错误报告机制——连得上不代表存得对、查得准;没开异常模式,PDO 和 mysqli 都可能静默失败。别只抄代码,先确认你用的 PHP 版本、MySQL 配置、以及是否真需要持久连接(PDO::ATTR_PERSISTENT => true 在 CLI 下反而有害)。
# mysql
# php
# word
# 编码
# 中文乱码
# 环境变量
# dns
# sql
# if
# 面向对象
# die
# Error
# mysqli
# pdo
# 字符串
# undefined
# function
# 对象
# sqlite
# postgresql
# 数据库
# 会报
# 错误报告
# 移除
# 的是
# 这是
# 如果你
# 第一个
# 设为
# 要先
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript常见的五种数组去重的方式
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
高端云建站费用究竟需要多少预算?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何基于PHP生成高效IDC网络公司建站源码?
Laravel如何为API生成Swagger或OpenAPI文档
android nfc常用标签读取总结
想要更高端的建设网站,这些原则一定要坚持!
在线制作视频网站免费,都有哪些好的动漫网站?
如何在服务器上三步完成建站并提升流量?
利用JavaScript实现拖拽改变元素大小
Thinkphp 中 distinct 的用法解析
MySQL查询结果复制到新表的方法(更新、插入)
JavaScript实现Fly Bird小游戏
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
详解jQuery中的事件
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
高性能网站服务器部署指南:稳定运行与安全配置优化方案
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Linux后台任务运行方法_nohup与&使用技巧【技巧】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Bootstrap整体框架之JavaScript插件架构
如何快速启动建站代理加盟业务?
node.js报错:Cannot find module 'ejs'的解决办法
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
香港服务器如何优化才能显著提升网站加载速度?
BootStrap整体框架之基础布局组件
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
如何在新浪SAE免费搭建个人博客?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
怎么用AI帮你设计一套个性化的手机App图标?
,怎么在广州志愿者网站注册?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
,网页ppt怎么弄成自己的ppt?
深入理解Android中的xmlns:tools属性
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel如何处理异常和错误?(Handler示例)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Python进程池调度策略_任务分发说明【指导】

