使用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. eclipse 将文件夹作为sourcefolder

    文件夹---右键

  2. 基于cygwin构建u-boot(五)结尾:shell 工具

    结尾,基于cygwin对u-boot的处理,很大一部分都是再处理 路径等相关的问题,只有一个涉及到gcc的参数配置. 为了达到顺利编译的目的,使用shell下的部分工具进行处理. 1.sed sed简 ...

  3. Android开发之打开闪光灯录制视频

    Android的SDK在线API上对录制视频的方法.步骤都写得非常清楚,但是如果没有一点思路,写起来也比较式费事.录制视频的全过程要打开闪光灯(可能是因为项目需要,或者特殊原因),则必须按照一定的顺序 ...

  4. Java学习笔记--Swing2D图形

    1.处理2D图形 要想使用java 2D库绘制图形,需要获得一个Graphics2D类对象.这个类是Graphics类的子类.paintComponent方法自动获得一个Graphics2D类对象,我 ...

  5. Linux 的系统运行级别

    运行级别          说明 0          系统关机状态 1 单用户工作状态,用于root对系统进行维护,此时不予许其他用户使用主机.(类似于windows 的安全模式) 2       ...

  6. VS2010安装MSDN

    VS2010正式版不再有单独的MSDN Library安装选项,以至于很多同学找不到本地的MSDN Library来用,其实VS2010的ISO安装光盘里已经包含有MSDN Library,只不过要手 ...

  7. Android AsyncTask 异步任务操作

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  8. Linux kernel API的查看

    一般来说Linux上查看一些函数API的说明咱们可以man一下.man 2是syscall,man 3是一些库的函数API. 以下是man sections的一些说明 The table below ...

  9. 福建省队集训被虐记——DAY4

    啊啊啊啊啊啊第四天考的是我最不擅长的图论--整个人都斯巴达了 //另外不得不吐槽下午的上课讲的都是网络流--难道是出题人觉得图论里除了网络流以外的其他算法都没有人权图样图森破? 愚蠢的算法(clums ...

  10. Java宝典(二)

    --String s = "a" + "b" + "c" + "d"; 一共创建了多少个对象? --对于如下代码: St ...