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() —— 必须改用 mysqliPDO

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 面向对象方式(推荐)

更清晰、支持预处理语句防

SQL 注入,且能自然捕获异常(配合 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);
```

真正容易被忽略的是字符集和错误报告机制——连得上不代表存得对、查得准;没开异常模式,PDOmysqli 都可能静默失败。别只抄代码,先确认你用的 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进程池调度策略_任务分发说明【指导】