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与数据库进行交互相关推荐

  1. php使用PDO从数据库表中读取数据

    php使用PDO从数据库表中读取数据 PDO为我们提供多种与数据库交互的方法,下面讨论两种可能的解决方案: 1.使用Query方法 首先看一下最快的.但却不是最好的方法-–query方法. <? ...

  2. pdo mysql 建库_一帖让PHP小白彻底了解PDO操作数据库的方法

    php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) .在这三种方法中,"民间"很多是倾向于使用PDO, ...

  3. 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...

    在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互.你可以本地安装 MySQL 数据库,也可以基于 Docker ...

  4. 小程序与MySQL数据库的交互_小程序是如何与数据库交互的?

    以往的开发方式: 小程序必须要绑定至少一个合法安全域名,且该域名必须是使用ssl证书的,也就是要以https协议.小程序正式上线后,只能跟合法安全域名内的域名进行信息互通.如果请求没有配置过的域名,会 ...

  5. ajax提交到mysql_利用ajax的方式来提交数据到后台数据库及交互功能

    怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置: $(function(){ var isusername ...

  6. C#_数据库基本交互

    //app.config <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  7. shell sqlplus执行sql文_各主流数据库非交互执行

    声明:    文章初衷仅为攻防研究学习交流之用,严禁利用相关技术去从事一切未经合法授权的入侵攻击破坏活动,因此所产生的一切不良后果与本文作者及该公众号无任何关联    另外,这只是一个个人性质的公众号 ...

  8. php pdo操作数据库

    POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成 ...

  9. php pdo输出数据库,PHP中PDO对像及PDOStatement::fetch()的用法数据库查询,结果输出处理...

    //isset()判读用户是否提交查询请求 if(isset($_GET['dosubmit'])){ //创建PDO数据库查询对象 $pdo=new PDO('mysql:host=localhos ...

最新文章

  1. JMH和Arthas定位问题的案例分享
  2. 第1章统计学习方法概论之1.1统计学习
  3. linux下confstr与uname函数_获取C库与内核信息
  4. html用颜色区分不同区间数据_最新数据可视化指南
  5. netty源码分析之一:server的启动
  6. 中文NER任务实验小结:BERT-MRC的再优化
  7. Weighted-Entropy-based Quantization for Deep Neural Networks 论文笔记
  8. boost多线程使用简例
  9. python打开excel进行编辑_使用Python进行Excel文件处理
  10. upload file more than 4MB
  11. (5)verilog语言编写呼吸灯
  12. mysql用大白话解释_大白话 golang 教程-22-关系型数据库访问
  13. Mybatis-Pagehelper
  14. 文献阅读软件_推荐一款阅读英文文献的神器,效率高不少,理解深不少!
  15. oracle数据库查看建表语句,oracle 查看建表语句
  16. GridView排序状态保持
  17. 2017.7.7 C组总结
  18. Stapler#攻略
  19. MySQL页面打捞工具使用方法
  20. 对话《主算法》作者:图灵测试是个坏主意 | AI英雄

热门文章

  1. PHP中的 empty() 函数和 isset() 函数
  2. CVPR2021:VMI-FGSM增强对抗样本可迁移性方法
  3. Android-设备管理器Device Administration
  4. Mysql进阶学习(六)子查询与分页查询
  5. 算法提高课——3.10 欧拉路径和欧拉回路
  6. Qt网络编程post请求,数据格式为json或x-www-form-urlencoded
  7. threejs点滴yan
  8. Android Studio开发(一)模拟微信页面
  9. jdk版本越高越好吗_jdk是不是版本越新越好
  10. tinyMediaManager不能搜刮,DNS解析