PHP PDO 一 : 常用方法
安装 PDO
- 请参阅:PHP PDO安装配置 官方文档 。
手册阅读方法
-
PDO::XXX()
意味为 PDO 类中可以使用 xxx() 方法。例如:
PDO::__construct()
为 PDO 构造方法,使用方法为$pdo = new PDO();
。PDO::query()
为 PDO 查询方法,使用方法为$pdo->query($sql)
。
相关常用方法
PDO::__construct()
-
创建 PDO 对象函数:
复制
/** * 创建一个表示数据库连接的 PDO 实例 * @param string $dsn 必需。一个数据库基本信息字符串,包含数据库类型、 IP 地址等。 * @param string $username [optional] 必需。数据库用户名。 * @param string $password [optional] 必需。数据库口令。 * @param array $options [optional] 可选。PDO属性设置,关联数组,利用PDO内部的常量进行设置。 */ public function __construct ($dsn, $username = null, $password = null, $options = null) {}
-
$dsn
格式:- 数据库类型:使用英文
:
与后字符分隔,如mysql:
; - 数据库主机 IP 地址:使用
host=[具体 IP 地址]
,跟在驱动名字之后,如mysql:host=localhost
。 - 端口:使用
port=[端口号]
,默认为3306
可以不写,拼凑在驱动名字后,如mysql:host=localhost;port=3306
; - 数据库名:使用
dbname=[数据库名]
(可以事先没有)。 - 注意:
- 数据库类型
mysql:
后字符串结构不区分先后顺序,如mysql:host=localhost;port=3306
或者mysql:port=3306;host=localhost
。 - 使用分号和其他驱动分开。
- 数据库类型
- 数据库类型:使用英文
-
示例:
复制
//利用变量保存数据来实现数据库初始化 $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $port='3306'; //数据库端口 $dbName='test'; //使用的数据库 $username='root'; //数据库连接用户名 $password=''; //对应的密码 $dsn="$dbms:host=$host;port=$port;dbname=$dbName"; //实例化 PDO 对象 $pdo = new PDO($dsn,$username,$password);
PDO::query()
-
执行 SQL 语句,返回 PDOStatement 对象,可以理解为结果集。
-
语法:
复制
public PDOStatement PDO::query ( string $statement ) public PDOStatement PDO::query ( string $statement , int $PDO::FETCH_COLUMN , int $colno ) public PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs ) public PDOStatement PDO::query ( string $statement , int $PDO::FETCH_INTO , object $object )
-
示例:
复制
foreach($pdo->query("SELECT * from DBList") as $row) { print $row['name'] . "\t"; print $row['email'] . "\n"; }
PDO::exec()
-
执行一条 SQL 语句,并返回受影响的行数。
写操作其实本质要注意的是执行SQL时可能出现的错误处理。
-
语法:
复制
int PDO::exec ( string $statement )
-
与
PDO::query()
区别:PDO::exec()
不会从一条 SELECT 语句中返回结果。对于在程序中只需要发出一次的 SELECT 语句,可以考虑使用PDO::query()
。 -
示例:
复制
/* 删除 FRUIT 数据表中满足条件的所有行 */ $count = $pdo->exec("DELETE FROM fruit WHERE colour = 'red'"); /* 返回被删除的行数 */ print("Deleted $count rows.\n");
-
如果是插入操作,有时候需要新增记录的自增长ID,可以通过
PDO::lastInsertId()
来获取。复制
$id = $pdo->lastInsertId();
断开连接
-
设 PDO 对象为
null
即可。复制
$pdo = null;
错误处理
PDO::errorCode
-
获取跟数据库句柄上一次操作相关的 SQLSTATE。
-
语法:
复制
mixed PDO::errorCode ( void )
-
示例:
复制
if(false === $rows){ //取出错误细信息 echo 'SQL错误:<br/>'; echo '错误代码为:' . $pdo->errorCode(); }
PDO::errorInfo
-
返回最后一次操作数据库的错误信息。
-
语法:
复制
public array PDO::errorInfo ( void )
-
示例:
复制
if(false === $rows){ //取出错误细信息 echo 'SQL错误:<br/>'; echo '错误原因为:' . $pdo->errorInfo()[2]; //errorInfo返回数组,2下标代表错误具体信息 }
注意
封装
- 实际使用PDO的时候,都会进行二次封装,因为PDO的操作有很多本身不够完善。
- 外部一般需要的只是结果,不考虑过程,所以在实际开发时要考虑二次封装。
错误抑制符
-
增加错误抑制符,抑制在初始化过程可能出现的错误。
复制
function pdo_init () { $pdo = @new PDO('mysql:host=localhost;port=3306;dbname=project','root','root'); ...... }
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/14103817.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构