news 2026/9/26 9:17:11

使用PHP连接MySQL数据库的多种方及错误处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用PHP连接MySQL数据库的多种方及错误处理

以下是使用PHP连接MySQL数据库的详细指南,涵盖多种方法、错误处理及最佳实践,供不同需求的开发者参考:

一、连接MySQL的常见方法

PHP支持多种方式连接MySQL数据库,主要推荐使用MySQLi扩展(面向MySQL优化)和PDO扩展(支持多数据库)。以下分别介绍具体实现:

1. 使用MySQLi扩展

MySQLi支持面向过程和面向对象两种编程风格,且兼容MySQL最新特性(如预处理语句)。

1.1 面向过程方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

$servername="localhost";// 数据库服务器地址

$username="root";// 数据库用户名

$password="";// 数据库密码

$dbname="test";// 数据库名称

// 创建连接

$conn= mysqli_connect($servername,$username,$password,$dbname);

// 检查连接状态

if(!$conn) {

die("连接失败: ". mysqli_connect_error());// 输出错误信息并终止脚本

}

echo"连接成功";

// 关闭连接(可选,脚本结束会自动关闭)

mysqli_close($conn);

?>

关键点:

  • mysqli_connect()参数依次为服务器地址、用户名、密码、数据库名(可选)。
  • mysqli_connect_error()返回详细的连接错误信息。

1.2 面向对象方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

$servername="localhost";

$username="root";

$password="";

$dbname="test";

// 创建连接对象

$conn=newmysqli($servername,$username,$password,$dbname);

// 检查连接状态

if($conn->connect_error) {

die("连接失败: ".$conn->connect_error);

}

echo"连接成功";

// 关闭连接

$conn->close();

?>

优势:

  • 更符合现代面向对象编程习惯。
  • 支持事务处理、预处理等高级功能。

2. 使用PDO扩展

PDO(PHP Data Objects)提供统一的接口支持多种数据库(如MySQL、PostgreSQL),适合需要跨数据库兼容性的项目。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

$servername="localhost";

$username="root";

$password="";

$dbname="test";

try{

// 创建PDO实例

$conn=newPDO("mysql:host=$servername;dbname=$dbname",$username,$password);

// 设置错误模式为异常捕获

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

echo"连接成功";

}catch(PDOException$e) {

echo"连接失败: ".$e->getMessage();// 捕获并输出异常信息

}

// 关闭连接(置为null即可)

$conn= null;

?>

关键点:

  • 连接字符串格式:mysql:host=主机名;dbname=数据库名。
  • setAttribute()设置错误处理模式,推荐使用异常机制提高代码健壮性。

二、错误处理与调试

连接失败可能由多种原因引起,需针对性处理:

1. 常见错误原因

  • MySQL服务未启动
  • 用户名/密码错误
  • 权限不足(如远程连接未授权)
  • PHP未启用MySQL扩展

2. 错误捕获方法

MySQLi:通过返回值检查或异常捕获:

1

2

3

if(!$conn) {

die("错误代码: ". mysqli_connect_errno() .",详细信息: ". mysqli_connect_error());

}

PDO:通过try-catch捕获异常:

1

2

3

4

5

try{

// 连接代码

}catch(PDOException$e) {

echo"错误信息: ".$e->getMessage();

}

3. 环境检查

  • 检查扩展是否启用:在PHP文件中运行phpinfo(),查看是否存在mysqli或pdo_mysql模块。
  • 修改php.ini:取消注释extension=mysqli和extension=pdo_mysql,重启Web服务。

三、安全与最佳实践

1:避免使用已弃用的mysql扩展

PHP 7+已移除mysql_connect(),需使用MySQLi或PDO。

2:使用预处理语句防止SQL注入

示例(MySQLi预处理):

1

2

3

$stmt=$conn->prepare("SELECT * FROM users WHERE email = ?");

$stmt->bind_param("s",$email);

$stmt->execute();

3:敏感信息保护

将数据库凭据存储在独立配置文件中,并设置文件权限禁止外部访问。

4:连接池与持久连接

高并发场景可使用连接池(如Swoole)或PDO持久连接(new PDO(..., [PDO::ATTR_PERSISTENT => true]))优化性能。

四、进阶操作示例

1. 执行查询(MySQLi面向对象)

1

2

3

4

5

6

7

8

9

10

$sql="SELECT id, name FROM users";

$result=$conn->query($sql);

if($result->num_rows > 0) {

while($row=$result->fetch_assoc()) {

echo"ID: ".$row["id"]." - Name: ".$row["name"]."<br>";

}

}else{

echo"0 结果";

}

2. 事务处理(PDO)

1

2

3

4

5

6

7

8

9

10

try{

$conn->beginTransaction();

// 执行多条SQL

$conn->exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1");

$conn->exec("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2");

$conn->commit();

}catch(Exception$e) {

$conn->rollBack();

echo"事务失败: ".$e->getMessage();

}

五、总结

方法适用场景优势
MySQLi纯MySQL项目、需使用MySQL特性高性能、支持预处理和事务
PDO多数据库支持、强调代码可移植性统一接口、强大的错误处理机制

推荐选择:

  • 新手或小型项目:从MySQLi面向过程入手,简单直接。
  • 中大型或跨数据库项目:优先使用PDO,提升安全性和扩展性。

通过合理选择连接方式、严格错误处理、遵循安全规范,可构建高效稳定的PHP数据库应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 9:17:05

Atlas 300V 24G推理加速卡部署YOLO:完整实操与踩坑总结

最近后台一直有人问我一个特别具体的问题&#xff1a;"Atlas 300V 24G 是运算加速卡吗"、"Atlas 上能不能部署 YOLO"。说实话&#xff0c;这俩问题问的人太多了&#xff0c;而且我发现不少人对昇腾这个生态还是存在一些误解&#xff0c;总把它跟普通 GPU 卡…

作者头像 李华
网站建设 2026/9/26 9:16:11

用户端电能计量管理系统落地实施:从PPT教案到现场交付的完整拆解

简介&#xff1a;这份PPT学习教案面向电力、建筑电气及能源管理领域的从业者与师生&#xff0c;系统讲解用户端电能计量管理系统的原理与落地应用。内容从电力生产流程与需求侧四大对象切入&#xff0c;剖析节能降耗、政府导向与行业推动下的电能管理动因&#xff0c;并逐项展开…

作者头像 李华
网站建设 2026/9/26 9:15:40

Atlas 300V 24G实战:从环境准备到YOLO模型转换部署全流程

这几年做AI推理落地&#xff0c;手边经手的加速卡从GPU到各家NPU都摸过一遍。说实话&#xff0c;华为昇腾的Atlas系列&#xff0c;是那种“看参数平平无奇&#xff0c;上手却经常有惊喜”的硬件。特别是Atlas 300V 24G这张运算加速卡&#xff0c;位宽、显存、功耗摆在参数表上不…

作者头像 李华
网站建设 2026/9/26 9:15:34

SQL Server字符串聚合:自定义函数与STRING_AGG方案详解

简介&#xff1a;这份资源聚焦 SQL Server 中字符串聚合这一常见却容易被忽视的查询需求&#xff0c;面向有一定 T-SQL 基础、需要处理分组字符串拼接的数据库开发与运维人员。当 SUM、AVG、COUNT、MAX、MIN 等数值聚合函数无法满足需求时&#xff0c;资源给出了通过自定义函数…

作者头像 李华
网站建设 2026/9/26 9:14:32

Spring AI 对接阿里 MCP 协议:TaoToken 统一 Key 配置与联调验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 9:13:49

OpenClaw 规则写入路由与审计协议:一份可复用的 TaoToken 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华