16 PDO
简介:
PHP 数据对象
(PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。
PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
PDO连接mysql
示例 #1 连接到 MySQL
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
示例 #2 处理连接错误
<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); foreach($dbh->query('SELECT * from table') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
示例 #3 关闭一个连接
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); // 在此使用连接 // 现在运行完成,在此关闭连接 $dbh = null; ?>
要想关闭连接,需要销毁对象以确保所有剩余到它的引用都被删除,可以赋一个 null
值给对象变量。如果不明确地这么做,PHP 在脚本结束时会自动关闭连接。
预处理语句与存储过程
示例 #1 用预处理语句进行重复插入
下面例子通过用 name
和 value
替代相应的命名占位符来执行一个插入查询
<?php $stmt = $dbh->prepare("INSERT INTO table (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); // 插入一行 $name = 'one'; $value = 1; $stmt->execute(); // 用不同的值插入另一行 $name = 'two'; $value = 2; $stmt->execute(); ?>
示例 #2 用预处理语句进行重复插入
下面例子通过用 name
和 value
取代 ?
占位符的位置来执行一条插入查询。
<?php $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); $stmt->bindParam(1, $name); $stmt->bindParam(2, $value); // 插入一行 $name = 'one'; $value = 1; $stmt->execute(); // 用不同的值插入另一行 $name = 'two'; $value = 2; $stmt->execute(); ?>
示例 #3 使用预处理语句获取数据
下面例子获取数据基于键值已提供的形式。用户的输入被自动用引号括起来,因此不会有 SQL 注入攻击的危险。
<?php $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); $stmt->execute([$_GET['name']]); foreach ($stmt as $row) { print_r($row); } ?>
PDOStatement::bindParam
PDOStatement::bindParam — 绑定一个参数到指定的变量名
示例 #1 执行一条使用命名占位符的预处理语句
<?php /* 通过绑定的 PHP 变量执行一条预处理语句 */ $calories = 150; $colour = 'red'; $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $sth->bindParam(':calories', $calories, PDO::PARAM_INT);//datatype应该可以不写 $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); $sth->execute(); ?>
示例 #2 执行一条使用问号占位符的预处理语句
<?php /* 通过绑定的 PHP 变量执行一条预处理语句 */ $calories = 150; $colour = 'red'; $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $sth->bindParam(1, $calories, PDO::PARAM_INT); $sth->bindParam(2, $colour, PDO::PARAM_STR, 12); $sth->execute(); ?>
PDO取出结果
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject 获取下一行并作为一个对象返回。
本文作者:xiaoovo
本文链接:https://www.cnblogs.com/xiaoovo/p/16136601.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!