PHP:使用PDO与数据库进行交互
PHP数据对象(PDO)是PHP与数据库进行交互的一种替代方式。如果我们在项目中使用了PDO,那么更换数据库,只需要更改一行代码。要确定安装的PHP版本支持哪些数据库,可调用PDO类的getAvailableDrivers()方法。
print_r(PDO::getAvailableDrivers());
1、连接数据库
所有对PDO的自定义都发生在与数据库建立连接的过程中,通过创建PDO对象建立与数据库的连接。该过程通过new关键字完成。创建PDO对象需要向PDO类的构造函数传递三个参数。
$pdo = new PDO('dsn', 'username', 'password');
其中dsn是“Data Source Name”的缩写,用于指明:需要使用的数据库驱动、数据库名、主机名(可选)和端口号(可选),如果使用SQLite,还需要提供数据库文件的路径。
要构造dsn,首先要指明数据库驱动,举个例子,使用MySQL数据库驱动,访问localhost上的tset数据库,则正确的dsn为:
mysql:dbname=test;host=localhost
要关闭与数据库的连接,只要销毁PDO对象即可:
unset($pdo);
或者将PDO对象置空:
$pdo = NULL;
2、捕获异常
作为一个类,PDO不是生成错误而是抛出异常,即抛出PDOException类型异常。
try {$pdo = new PDO('mysql:dbname=dnf_db;host=localhost', 'root', '');unset($pdo);
} catch (PDOException $e) {echo $e.getMessage();
}
3、执行简单查询
对于那些不返回结果的简单查询:INSERT(插入)、UPDATE(更新)和DELETE(删除),使用exec()方法,它使用需要执行的查询语句作为参数:
$q = "DELETE FROM tablename";
$pdo->exec($q);
对于这些查询,exec()方法将会返回影响到的函数(没有影响,就返回0;当查询出错时,返回false)。
如果只是执行了INSERT查询并且要知道动态生成的主键值,可调用lastInsertId()方法:
$id = $pdo->lastInsertId();
在执行简单查询时我们要防止SQL注入,我们可以使用 预处理语句来防范SQL注入。
4、执行SELECT查询
不返回记录的简单查询通过exec()方法来执行,而那些返回记录的查询需要query()方法,并将结果赋予新的变量:
$result = $pdo->query($q);
要查询返回了多少条记录,调用rowCount()方法即可:
$result->rowCount();
变量$result是与PDO、PDOException类并列为最重要的三个PDO类的PDOStatement类的对象。
一旦返回了结果,就可以使用PDOStatement类的对象(如$result)的fetch()方法,但是首先要设定PHP读取记录的方式。这通过一个常数为参数的setFetchMode()方法,常用值有:
PDO::FETCH_ASSOC,应用于关联数组
PDO::FETCH_NUM,应用于以数值为索引的数组
PDO::FETCH_OBJ,应用于泛型对象
PDO::FETCH_CLASS,应用于特定类型的对象
示例程序:
try {$pdo = new PDO('mysql:dbname=dnf_db;host=localhost', 'root', '');$pdo->query("SET NAMES UTF8");//设定编码$sql = "SELECT * FROM data_tb";$result = $pdo->query($sql);$result->setFetchMode(PDO::FETCH_NUM);//设定读取记录的方式while ($row = $result->fetch()) {echo $row[6]."<br>";}unset($pdo);
} catch (PDOException $e) {echo $e.getMessage();
}
运行结果:
5、使用预处理语句
传统做法中,在一个函数中完成组合查询语句并传给数据库的方式为:
$results = $pdo->query("SELECT * FROM tablename WHERE email='$email' ");
而使用预定义语句,查询语句与具体数据则分开传送,这样做执行效率会更高,安全管理更方便。同时由于数据与查询分开传送,就不需要防范SQL注入。
要使用PDO的预定义语句,首先要调用PDO的prepare()方法。将查询语句作为参数传递给该方法,查询语句中的动态数据用占位符(即?)来代替:
$stmt = $pdo->prepare('SELECT * FROM tablename WHERE email = ?');
这个方法会返回PDOStatement的对象,接下来调用PDOStatement对象的exec()方法,其参数为动态数据组成的参数:
$stmt->execute(array('me@email.com'));
如果有多个动态数据,那么在数组中的出现顺序与查询语句中的顺序应一致。
用什么符号来占位是可选的,我们也可以使用”具名占位符“:
$stmt = $pdo->prepare('SELECT * FROM tablename WHERE email=:email');$stmt->execute(array(':email' => 'me@email.com'));
示例程序:
try {$pdo = new PDO('mysql:dbname=dnf_db;host=localhost', 'root', '');$pdo->query("SET NAMES UTF8");//设定编码$stmt = $pdo->prepare('INSERT INTO data_tb (ss, soul, baozhu, useful, cost, imgsrc) VALUES (:ss, :soul, :baozhu, :useful, :cost, :imgsrc)');$sucess = $stmt->execute(array(':ss' => '4', ':soul' => '2', ':baozhu' => '1', ':useful' => '妖刀', ':cost' => '1200',':imgsrc' => '404.jpg'));if ($sucess) {echo "新增数据成功";}else {echo "失败";}unset($pdo);
} catch (PDOException $e) {echo $e.getMessage();
}
运行结果:
PHP:使用PDO与数据库进行交互相关推荐
- php使用PDO从数据库表中读取数据
php使用PDO从数据库表中读取数据 PDO为我们提供多种与数据库交互的方法,下面讨论两种可能的解决方案: 1.使用Query方法 首先看一下最快的.但却不是最好的方法-–query方法. <? ...
- pdo mysql 建库_一帖让PHP小白彻底了解PDO操作数据库的方法
php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) .在这三种方法中,"民间"很多是倾向于使用PDO, ...
- 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互.你可以本地安装 MySQL 数据库,也可以基于 Docker ...
- 小程序与MySQL数据库的交互_小程序是如何与数据库交互的?
以往的开发方式: 小程序必须要绑定至少一个合法安全域名,且该域名必须是使用ssl证书的,也就是要以https协议.小程序正式上线后,只能跟合法安全域名内的域名进行信息互通.如果请求没有配置过的域名,会 ...
- ajax提交到mysql_利用ajax的方式来提交数据到后台数据库及交互功能
怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置: $(function(){ var isusername ...
- C#_数据库基本交互
//app.config <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- shell sqlplus执行sql文_各主流数据库非交互执行
声明: 文章初衷仅为攻防研究学习交流之用,严禁利用相关技术去从事一切未经合法授权的入侵攻击破坏活动,因此所产生的一切不良后果与本文作者及该公众号无任何关联 另外,这只是一个个人性质的公众号 ...
- php pdo操作数据库
POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成 ...
- php pdo输出数据库,PHP中PDO对像及PDOStatement::fetch()的用法数据库查询,结果输出处理...
//isset()判读用户是否提交查询请求 if(isset($_GET['dosubmit'])){ //创建PDO数据库查询对象 $pdo=new PDO('mysql:host=localhos ...
最新文章
- JMH和Arthas定位问题的案例分享
- 第1章统计学习方法概论之1.1统计学习
- linux下confstr与uname函数_获取C库与内核信息
- html用颜色区分不同区间数据_最新数据可视化指南
- netty源码分析之一:server的启动
- 中文NER任务实验小结:BERT-MRC的再优化
- Weighted-Entropy-based Quantization for Deep Neural Networks 论文笔记
- boost多线程使用简例
- python打开excel进行编辑_使用Python进行Excel文件处理
- upload file more than 4MB
- (5)verilog语言编写呼吸灯
- mysql用大白话解释_大白话 golang 教程-22-关系型数据库访问
- Mybatis-Pagehelper
- 文献阅读软件_推荐一款阅读英文文献的神器,效率高不少,理解深不少!
- oracle数据库查看建表语句,oracle 查看建表语句
- GridView排序状态保持
- 2017.7.7 C组总结
- Stapler#攻略
- MySQL页面打捞工具使用方法
- 对话《主算法》作者:图灵测试是个坏主意 | AI英雄
热门文章
- PHP中的 empty() 函数和 isset() 函数
- CVPR2021:VMI-FGSM增强对抗样本可迁移性方法
- Android-设备管理器Device Administration
- Mysql进阶学习(六)子查询与分页查询
- 算法提高课——3.10 欧拉路径和欧拉回路
- Qt网络编程post请求,数据格式为json或x-www-form-urlencoded
- threejs点滴yan
- Android Studio开发(一)模拟微信页面
- jdk版本越高越好吗_jdk是不是版本越新越好
- tinyMediaManager不能搜刮,DNS解析