【笔记】PDO数据库抽象层学习笔记(不断更新中....)
2015-09-02 17:52
387 查看
<该文章版权归imooc的Mr.King老师所有>
在学习PDO数据库抽象层的视频的时候,整理Mr.King老师的视频笔记如下,算是一个学习记录,如果对此感兴趣的同学请移步至imooc网站上自行查看学习该系列视频=> http://www.imooc.com/learn/164
----------------------------------------------------我是笔记的分割线---------------------------------------------------------
什么是PDO?
PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口。
为什么要使用PDO?
PHP支持市面上所有的数据库。PHP对数据库的支撑不好。应用程序之间难以维护。抽象度不够,访问接口不通一。让PHP对多种数据库比较艰难。重新编写跟数据库相关的函数。PDO出现了,可以让代码变得更简洁。无论使用哪一种数据库都可以。
PDO有什么优点?
编码一致性。
灵活性。
高性能。PDO使用C语言编写的。
面向对象特性。PDO利用PHP5面向对象的特性。
PDO安装与配置
1. 配置PHP配置文件,开启相应扩展
extension=php_pdo.so
2. 开启对相应数据库的扩展(以MySQL为例)
extension=php_pdo_mysql.so
3. 通过查看phpinfo可以看到PDO扩展的详细信息
PDO连接数据库
1. 通过参数的形式连接数据库
2. 通过URI形式连接数据库
3. 通过配置文件形式连接数据库
通过参数的形式连接数据库(推荐这种形式)
通过URI形式连接数据库
dsn.txt
通过配置文件的形式连接数据库
修改php.ini文件,在php.ini文件里任意一个位置加入以下这行:
代码
PDO对象的方法
exec() 执行一条SQL语句,并返回其受影响的行数
query() 执行一条SQL语句,返回一个PDOStatement对象
prepare() 准备要执行的SQL语句,返回PDOStatement对象
quote() 返回一个添加引号的字符串,用于SQL语句中
lastInsertId() 返回最后插入行的ID
setAttribute() 设置数据库连接属性
getAttribute() 得到数据库连接的属性
errorCode() 获取跟数据库句柄上一次操作相关的SQLSTATE
errorInfo() 获取跟数据库句柄上一次操作的错误信息
创建表以及插入一条数据
插入多条数据:
返回最后插入一行的ID号:
更新和删除:
查询:
PDOStatement对象的方法
execute() 执行一条预处理语句
rowCount() 返回上一个SQL语句影响的行数
fetch() 从结果集中获取一行
fetchAll() 返回一个包含结果集中所有行的数组
setFetchModel() 为语句设置默认的获取模式
fetchColumn() 从结果集中的下一行返回单独的一列
fetchObject() 获取下一行并作为一个对象返回
bindParam() 绑定一个参数到指定的变量名
bindValue() 把一个值绑定到一个参数
设置数据库连接属性
bindParam() 绑定一个参数到指定的变量名
bindValue() 把一个值绑定到一个参数
写法一:
写法二:
PDOStatement对象的方法
PDO函数 说明
bindColumn() 绑定一列到一个PHP变量
getColumnMeta() 返回结果集中一列的元数据
columnCount() 返回结果集中的列数
setAttribute() 设置一个语句属性
getAttribute() 检索一个语句属性
errorCode() 获取跟上一次语句句柄操作相关的SQLSTATE
errorInfo() 获取跟上一次语句句柄操作相关的扩展错误信息
debugDumpParam() 打印一条SQL预处理命令
nextRowset() 在一个多行集语句句柄中推进到下一个行集
bindColumn() 绑定一列到一个PHP变量
debugDumpParam() 打印一条SQL预处理命令
写法一:
写法二:
PDO错误处理模式
PDO对象的方法
方法 描述
beginTransaction() 启动一个事务
commit() 提交一个事务
rollBack() 回滚一个事务
inTransaction() 检测是否在一个事务内
事务:把很多事情当作一件事情做,要么都成功,要么都失败
ACIP:
原子型
一致性
完整性
持久性
在学习PDO数据库抽象层的视频的时候,整理Mr.King老师的视频笔记如下,算是一个学习记录,如果对此感兴趣的同学请移步至imooc网站上自行查看学习该系列视频=> http://www.imooc.com/learn/164
----------------------------------------------------我是笔记的分割线---------------------------------------------------------
什么是PDO?
PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口。
为什么要使用PDO?
PHP支持市面上所有的数据库。PHP对数据库的支撑不好。应用程序之间难以维护。抽象度不够,访问接口不通一。让PHP对多种数据库比较艰难。重新编写跟数据库相关的函数。PDO出现了,可以让代码变得更简洁。无论使用哪一种数据库都可以。
PDO有什么优点?
编码一致性。
灵活性。
高性能。PDO使用C语言编写的。
面向对象特性。PDO利用PHP5面向对象的特性。
PDO安装与配置
1. 配置PHP配置文件,开启相应扩展
extension=php_pdo.so
2. 开启对相应数据库的扩展(以MySQL为例)
extension=php_pdo_mysql.so
3. 通过查看phpinfo可以看到PDO扩展的详细信息
PDO连接数据库
1. 通过参数的形式连接数据库
2. 通过URI形式连接数据库
3. 通过配置文件形式连接数据库
通过参数的形式连接数据库(推荐这种形式)
<span style="font-size:14px;"><?php try{ $dsn='mysql:host=localhost;dbname=imooc'; $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); }catch(PDOException $e){ echo $e->getMessage(); } </span>
通过URI形式连接数据库
<span style="font-size:14px;"><?php try{ $dsn='uri:/var/www/html/dsn.txt'; //windows: $dsn='uri:file://G:\phpdev\apache\htdocs\pdo\dsn.txt'; $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); } ?> </span>
dsn.txt
<span style="font-size:14px;">mysql:dbname=imooc;host=localhost </span>
通过配置文件的形式连接数据库
修改php.ini文件,在php.ini文件里任意一个位置加入以下这行:
<span style="font-size:14px;">pdo.dsn.imooc="mysql:host=localhost;dbname=imooc"</span>修改完后重启apache
代码
<span style="font-size:14px;"><?php try{ $dsn='imooc'; //数据库名字 $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); } ?> <?php try{ $dsn='imooc'; //数据库名字 $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); } ?> </span>
PDO对象的方法
exec() 执行一条SQL语句,并返回其受影响的行数
query() 执行一条SQL语句,返回一个PDOStatement对象
prepare() 准备要执行的SQL语句,返回PDOStatement对象
quote() 返回一个添加引号的字符串,用于SQL语句中
lastInsertId() 返回最后插入行的ID
setAttribute() 设置数据库连接属性
getAttribute() 得到数据库连接的属性
errorCode() 获取跟数据库句柄上一次操作相关的SQLSTATE
errorInfo() 获取跟数据库句柄上一次操作的错误信息
创建表以及插入一条数据
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); //exec() 执行一条SQL语句,并返回其受影响的行数, 如果没有受影响的记录,他返回0 //exec()对于select没有作用 $sql=<<<EOF CREATE TABLE IF NOT EXISTS user( id INT UNSIGNED AUTO_INCREMENT KEY, username VARCHAR(20) NOT NULL UNIQUE, password CHAR(32) NOT NULL, email VARCHAR(30) NOT NULL ); EOF; $res=$pdo->exec($sql); var_dump($res); $sql='INSERT user(username,password,email) VALUES("king","'.md5('king').'","imooc@qq.com")'; $res=$pdo->exec(); echo $res; }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
插入多条数据:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); //exec() 执行一条SQL语句,并返回其受影响的行数, 如果没有受影响的记录,他返回0 //exec()对于select没有作用 $sql=<<<EOF INSERT user(username,password,email) VALUES("king1","king1","imooc1@qq.com"), ("king2","king2","imooc2@qq.com"), ("king3","king3","imooc3@qq.com") EOF; $res=$pdo->exec($sql); var_dump($res); //output: 3 意味3条记录插入成功 }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
返回最后插入一行的ID号:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); //exec() 执行一条SQL语句,并返回其受影响的行数, 如果没有受影响的记录,他返回0 //exec()对于select没有作用 $sql=‘INSERT user(username,password,email) VALUES("king1","king1","imooc1@qq.com")’; $res=$pdo->exec($sql); echo 'affected row count:'.$res; //$pdo->lastInsertId(); 得到新插入记录的ID号 echo 'last inserted id:'.$pdo->lastInsertId(); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
更新和删除:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql=‘UPDATE user set username = "imooc" where id = 1’; $res=$pdo->exec($sql); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql=‘DELETE user where id = 3’; $res=$pdo->exec($sql); echo 'affected row count:'.$res; //$pdo->lastInsertId(); 得到新插入记录的ID号 echo 'last inserted id:'.$pdo->lastInsertId(); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
查询:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql=‘select * from user where id=2’; //$pdo->query($sql),执行SQL语句,返回PDOStatement对象 $stmt=$pdo->query($sql); //var_dump($stmt); //loop print this statement foreach($stmt as $row){ print_r($row); } }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
PDOStatement对象的方法
execute() 执行一条预处理语句
rowCount() 返回上一个SQL语句影响的行数
fetch() 从结果集中获取一行
fetchAll() 返回一个包含结果集中所有行的数组
setFetchModel() 为语句设置默认的获取模式
fetchColumn() 从结果集中的下一行返回单独的一列
fetchObject() 获取下一行并作为一个对象返回
bindParam() 绑定一个参数到指定的变量名
bindValue() 把一个值绑定到一个参数
设置数据库连接属性
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); echo '自动提交'.$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); echo '<br/>'; echo ‘PDO默认的错误处理模式:’.$pdo->getAttribute(PDO::ATTR_ERRMODE); $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0); echo '自动提交'.$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
bindParam() 绑定一个参数到指定的变量名
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = "insert user(username, password, email) VALUES (:username, :password, :email)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(":username",$username, PDO::PARAM_STR); $stmt->bindParam(":password",$password, PDO::PARAM_STR); $stmt->bindParam(":email",$email); $username="imooc"; $password="imooc"; $email="imooc@imooc.com"; $stmt->execute(); echo $stmt->rowCount(); //返回受影响的行数 }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = "insert user(username, password, email) VALUES (?,?,?)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(1,$username); $stmt->bindParam(2,$password); $stmt->bindParam(3,$email); $username="imooc"; $password="imooc"; $email="imooc@imooc.com"; $stmt->execute(); echo $stmt->rowCount(); //return affected row }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); //$sql = "delete from user where username = :username and password = :password"; $sql = "delete from user where id <: id "; $stmt = $pdo->prepare($sql); $stmt->bindParam(":id",$id, PDO::PARAM_INT); $id=10; $stmt->execute(); echo $stmt->rowCount(); //return affected rows count }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
bindValue() 把一个值绑定到一个参数
写法一:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = 'insert user(username, password, email) VALUES(?,?,?) '; $stmt=$pdo->prepare($sql); $username='imooc'; $password='imooc'; $email='imooc@imooc.com'; $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,$email); $stmt->execute(); echo $stmt->rowCount(); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
写法二:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = 'insert user(username, password, email) VALUES(:username,:password,:email) '; $stmt=$pdo->prepare($sql); $username='imooc'; $password='imooc'; $email='imooc@imooc.com'; $stmt->bindValue(':username',$username); $stmt->bindValue(':password',$password); $stmt->bindValue(':email',$email); $stmt->execute(); echo $stmt->rowCount(); }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
PDOStatement对象的方法
PDO函数 说明
bindColumn() 绑定一列到一个PHP变量
getColumnMeta() 返回结果集中一列的元数据
columnCount() 返回结果集中的列数
setAttribute() 设置一个语句属性
getAttribute() 检索一个语句属性
errorCode() 获取跟上一次语句句柄操作相关的SQLSTATE
errorInfo() 获取跟上一次语句句柄操作相关的扩展错误信息
debugDumpParam() 打印一条SQL预处理命令
nextRowset() 在一个多行集语句句柄中推进到下一个行集
bindColumn() 绑定一列到一个PHP变量
<span style="font-size:14px;"><?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = 'select username, password, email from user'; $stmt=$pdo->prepare($sql); $stmt->execute(); echo "how many columns in result? ".$stmt->columnCount(); //under development echo '<hr/>'; print_r($stmt->getColumnMeta(0)); //under development $stmt->bindColumn(1,$username); $stmt->bindColumn(2,$password); $stmt->bindColumn(3,$email); while($stmt->fetch(PDO::FETCH_BOUND)){ echo 'username: ' . $username . 'password: ' . $password .'email: '. $email.'<hr/>'; } }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
<span style="font-size:14px;"><?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql = 'select username, password, email from user'; $stmt=$pdo->query($sql); $stmt->fetchColumn(0),'<br/>'; //第一行的第一列 $stmt->fetchColumn(1),'<br/>'; //第二行的第二列(当执行完一次指针下移,无法继续取得第一行的第二列,此时在fetchColumn中,第二行为第一行) $stmt->fetchColumn(2),'<br/>'; //第三行的第三列(同上,指针下移,第三行为第一行) }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
debugDumpParam() 打印一条SQL预处理命令
写法一:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql='INSERT user(username,password,email) VALUES(?,?,?);'; $stmt->$pdo->prepare($sql); $stmt->bindParam(1,$username,PDO::PARAM_STR); $stmt->bindParam(2,$password,PDO::PARAM_STR); $stmt->bindParam(3,$email,PDO::PARAM_STR); $username='testParam'; $password='testParam'; $email='testParam@imooc.com'; $stmt->execute(); $stmt->debugDumpParams(); }catch(PDOException $e){ echo $e->getMessage(); } ?> </span>
写法二:
<span style="font-size:14px;"><?php try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql='select * user where username=:username AND password =:password;'; $stmt->$pdo->prepare($sql); $stmt->bindParam(':username',$username,PDO::PARAM_STR); $stmt->bindParam(':password',$password,PDO::PARAM_STR); $username='testParam'; $password='testParam'; $stmt->execute(); $stmt->debugDumpParams(); }catch(PDOException $e){ echo $e->getMessage(); } ?> </span>
PDO错误处理模式
<span style="font-size:14px;"><?php /* PDO::ERRMODE_SLIENT:默认模式 PDO::ERRMODE_WARNING:警告模式 PDO::ERRMODE_EXCEPTION:异常模式 */ try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $sql = 'select * from noneTable'; //没有这个表格 $pdo->query($sql); echo $pdo->errorCode(); //sqlstate error code echo '<br/>'; print_r($pdo->errorInfo()); //错误信息以数组的形式打印出来 }catch(PDOException $e){ echo $e->getMessage(); } ?></span>
PDO对象的方法
方法 描述
beginTransaction() 启动一个事务
commit() 提交一个事务
rollBack() 回滚一个事务
inTransaction() 检测是否在一个事务内
事务:把很多事情当作一件事情做,要么都成功,要么都失败
ACIP:
原子型
一致性
完整性
持久性
相关文章推荐
- 编写一个存储过程 sqlserver专用 oracle稍有区别
- Appboy 基于 MongoDB 的数据密集型实践
- MySQL 5.6 源码目录结构
- sql 触发器快速入门
- [Redis]通过代码配置Redis
- Appboy 基于 MongoDB 的数据密集型实践
- Oracle 全文检索 中文检索
- oracle imp导入dmp文件报12506错误解决办法
- ibatis-sqlmap和sourceforge.ibatis对sqlmap的变量处理的不同
- Oracle错误一览表
- c#调用plsql的procedure
- Mysql的存储引擎之:MERGE存储引擎
- Memcached之HA架构(9)
- Oracle中生成随机数的函数
- Oracle 中union的用法
- sql操作
- MySql开启远程访问
- santoku系统安装mysql数据库并进行建表
- mysql-concat扩展函数
- mysql root 忘记密码