使用PDO之前首先开启PHP的PDO扩展,方法见百度。

PDO连接数据库的方式有三种

1.通过参数的形式连接数据库 (推荐)

//通过参数形式连接数据库
try{
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$passwd = '';
$options = array(PDO::ATTR_PERSISTENT=>TRUE); //设置属性[可选参数]
$pdo = new PDO($dsn, $username, $passwd, $options);
var_dump($pdo);
}catch(PDOException $e){
echo $e->getMessage();
}

2.通过URI的形式连接数据库

3.通过配置文件的形式连接数据库

首先在配置文件php.ini添加一行 pdo.dsn.test="mysql:localhost;dbname=test"   //test是自定义的数据源名称

$dsn  = 'test';  //配置文件中数据源名称
$username = 'root';
$passwd = '';
$pdo = new PDO($dsn, $username, $passwd);

PDO常用操作

exec()   执行一条sql语句,并返回受影响的行数(只对写数据操作有效,如增删改)

$sql =<<<EOF
insert into user2 values(1);
EOF;
$result = $pdo->exec($sql);

lastInsertId()   得到最后的自增的ID号

errorCode()      返回上一次操作的错误码

errorInfo()       返回上一次操作的错误信息

query()           执行查询SQL语句,返回关联+索引的二维数组,但是该方法也可以执行写数据库的SQL,只是不能返回受影响的行数。

prepare()        预处理

execute()        执行一条预处理命令

fetch()            从结果集里获取一行数据

fetchAll()        获取结果集里面的所有数据

   $sql =<<<EOF
select * from user;
EOF;
$pre = $pdo->prepare($sql);
$info = $pre->execute(); while($row = $pre->fetch(PDO::FETCH_BOTH)){
var_dump($row);
echo "<br/>";
}
$result = $pre->fetchAll(PDO::FETCH_ASSOC);

getAttribute()  获取属性

setAttribute()  设置属性

rowCount()     返回查询的行数或者受影响的行数

nextRowset()   将指针移动到下一个结果集

防止SQL注入攻击

quote方法在字符串前面自动加上单引号并转义特殊符号

$pass = "' or 1 = 1 #";
$pass = $pdo->quote($pass);

//return   '\' or 1 = 1 #'

预处理语句中的占位符使用

第一种占位符是 :的形式

$sql = " SELECT * FROM user WHERE id = :id AND name = :name ";
$pre = $pdo->prepare($sql);
$pre->execute(array(':id'=> , ':name'=>'b'));
$rsult = $pre->rowCount(); //返回查询的行数

第二种占位符是?的形式

$sql = " SELECT * FROM user WHERE id = ? AND name = ? ";
$pre = $pdo->prepare($sql);
$pre->execute(array( , 'b'));
$rsult = $pre->rowCount(); //返回查询的行数

bindParam()方法绑定参数

:变量占位符方式
$sql = " INSERT INTO user(id, name) VALUES (:id, :name)";
$pre = $pdo->prepare($sql);
$pre->bindParam(':id', $id, PDO::PARAM_STR); //绑定参数
$pre->bindParam(':name', $name, PDO::PARAM_STR); //绑定参数
$id = ;
$name = 'cj';
$pre->execute();
?占位符方式
$sql = " INSERT INTO user(id, name) VALUES (?, ?)";
$pre = $pdo->prepare($sql);
$pre->bindParam(, $id, PDO::PARAM_STR); //绑定参数
$pre->bindParam(, $name, PDO::PARAM_STR); //绑定参数
$id = ;
$name = 'cj';
$pre->execute();

bindValue() 绑定参数【跟bindParam大同小异】

设置PDO三种错误处理模式

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); //默认模式,静默模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //警告模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //异常模式,推荐使用

PDO事务处理

事务是把很多SQL语句放在一起执行,如果某条出错,可以回滚到最初始的状态,这样可以保证流程的完整。

//关闭自动提交
setAttribute(PDO::ATTR_AUTOCOMMIT, 0);

rollBack();  //失败就回滚

commit();  //提交

inTransaction();   //检查是否在事务中

//关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, );
//开启事务
$pdo->beginTransaction();
$sql1 = 'INSERT INTO user VALUES (13, "transaction")';
$action1 = $pdo->exec($sql1);
if($action1 == ){
echo '插入10失败';
$pdo->rollBack(); //失败就回滚
}
$sql2 = 'INSERT INTO user VALUES (10, "transaction")';
$action2 = $pdo->exec($sql2);
if($action2 == ){
echo '插入11失败';
$pdo->rollBack(); //失败就回滚
}
//检查是否在事务中
$position = $pdo->inTransaction();
$pdo->commit(); //提交

 

PDO基础知识的更多相关文章

  1. PDO 基础知识

    PDO: 一.含义: 数据访问抽象层 二.作用 :通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ①$dsn="mysql:dbname=zz(数据库名);host=localho ...

  2. MySQL_基础知识

    -----基础知识 1.什么是数据库?     数据库(Database)是按照数据结构来组织.存储和管理数据的仓库   2.什么是关系型数据库.主键,外键,索引分别是什么?        关系型数据 ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  5. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  6. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  7. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  8. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

随机推荐

  1. js页面加载进度条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Front end workflow

    标签:请叫我红领巾 记一哈记一哈 ^_^ 推荐个不错的群 自己刚开始折腾的时候也是无处下手,渺茫啊.然而我是有一个很好的前端群(真的很棒,欢迎加入:[375042952]),关注群里的每一次讨论,每一 ...

  3. JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象

    目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...

  4. FP—Growth算法

    FP_growth算法是韩家炜老师在2000年提出的关联分析算法,该算法和Apriori算法最大的不同有两点: 第一,不产生候选集,第二,只需要两次遍历数据库,大大提高了效率,用31646条测试记录, ...

  5. 迁移笔记:php截取文字的方法

    php内置函数 1. iconv iconv_set_encoding('internal_encoding', 'UTF-8'); $str; //字符串的声明 $num=iconv_strlen( ...

  6. DHTMLEdit

    DHTMLEdit   POP3研究了一会,发现如果要写一个类似FOXMAIL的东西,还需要解决一个编辑的问题.以为邮件是支持HTML编辑的. 网上查了一会发现可以使用WINDOWS自带的控件:DHT ...

  7. 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good

    浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...

  8. 学习Haskell的一些资料

    趣学Haskell指南: http://fleurer-lee.com/lyah/chapters.htm 对应的英文原文: http://learnyouahaskell.com/chapters ...

  9. Magento How To Display Product Custom Option On list.phtml

    Some time we need to display custom option of product on category list page to achive this task we o ...

  10. 如何使用WCF调试器WcfTestClient.exe

    如果启用服务出现如下异常 请启用下面该服务 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 文件->添加服务  地 ...