您的位置:首页 > 移动开发 > Objective-C

php之PDO (PHP DATA OBJECT)

2017-07-26 00:17 549 查看

PHP 5.1 开始附带了 PDO,PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库(比如mysql,oracle,mssql…),都可以用相同的函数(方法)来查询和获取数据。

1.创建PDO对象

使用PDO扩展必须在php.ini文件中打开相应的扩展,下图打开了pdo_mysql的扩展:



那怎么创建一个pdo对象呢?

?

2.PDO对象主要方法

PDO::beginTransaction — 启动一个事务 PDO::commit — 提交一个事务 PDO::__construct — 创建一个表示数据库连接的 PDO 实例 PDO::errorCode — 获取跟数据库句柄上一次操作相关的 PDO::errorInfo — 获取最后操作关联的错误信息,返回一个数组 PDO::exec — 执行一条 SQL 语句(insert ,delete,update),并返回受影响的行数,失败则为false PDO::getAttribute — 取回一个数据库连接的属性
PDO::getAvailableDrivers — 返回一个可用驱动的数组 PDO::inTransaction — 检查是否在一个事务内 PDO::lastInsertId — 返回最后插入行的ID或序列值 PDO::prepare — 预处理语句返回一个PDOStatement 对象 PDO::query — 执行查询语句,返回一个结果集对象PDOStatement PDO::quote — 给字符串加引号,如:’string’ 用于查询 PDO::rollBack — 回滚一个事务 PDO::setAttribute
— 设置属性
更多详见:



<h2 id="3pdostatement对象主要方法">3.PDOStatement对象主要方法
在拿到PDO对象后,执行sql语句:

?
上述代码的 $stmt 就是PDOStatement对象,它是执行sql语句后返回的结果集。

PDOStatement对象主要方法:

1. PDOStatement::bindColumn — 绑定一列到一个 PHP 变量

2. PDOStatement::bindParam — 绑定一个参数到指定的变量名

3. PDOStatement::bindValue — 把一个值绑定到一个参数

4. PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。

5. PDOStatement::columnCount — 返回结果集中的列数

6. PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令

7. PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE

8. PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息

9. PDOStatement::execute — 执行一条预处理语句

10. PDOStatement::fetch — 从结果集中获取下一行

11. PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组

12. PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。

13. PDOStatement::fetchObject — 获取下一行并作为一个对象返回。

14. PDOStatement::getAttribute — 检索一个语句属性

15. PDOStatement::getColumnMeta — 返回结果集中一列的元数据

16. PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集

17. PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数

18. PDOStatement::setAttribute — 设置一个语句属性

19. PDOStatement::setFetchMode — 为语句设置默认的获取模式。

4.使用PDO操作mysql

?
?
运行结果:

 



 

现在故意把sql写错:

$sql = “update productxx set price = 1998 where pro_id = 1”;

?
?
运行结果:

 



 

使用事务:

?
?
获取不同形式的结果集:

?
'; //返回的结果以数字下标为key $row = $stmt->fetch(PDO::FETCH_NUM); print_r($row); echo '

'; //PDO::FETCH_ASSOC + PDO::FETCH_NUM $row = $stmt->fetch(PDO::FETCH_BOTH);//默认就是PDO::FETCH_BOTH print_r($row); echo '

'; //返回结果是内置标准类stdClass ,数据库字段名作为属性名 $row = $stmt->fetch(PDO::FETCH_OBJ);//默认就是PDO::FETCH_BOTH print_r($row); echo '

'; class Row{} //返回结果是指定类对象 ,数据库字段名作为属性名 $stmt->setFetchMode(PDO::FETCH_CLASS,'Row'); $row = $stmt->fetch();//默认就是PDO::FETCH_BOTH print_r($row); echo '

'; //获取所有的结果集 $sql = "select pro_id,pinpai from product limit 2"; $stmt = $dbh->query($sql); //这里得到的结果是二维数组 $rows = $stmt->fetchAll();//fetchAll([PDO::FETCH_BOTH]) 默认是PDO::FETCH_BOTH echo "


?


5.PDO错误处理方式

PDO 提供了三种不同的错误处理模式,以满足不同风格的应用开发:

1.PDO::ERRMODE_SILENT

此为默认模式。 PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象。如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方法。

2.PDO::ERRMODE_WARNING

除设置错误码之外,PDO 还将发出一条传统的 E_WARNING 信息。如果只是想看看发生了什么问题且不中断应用程序的流程,那么此设置在调试/测试期间非常有用。

3.PDO::ERRMODE_EXCEPTION

除设置错误码之外,PDO 还将抛出一个 PDOException 异常类并设置它的属性来反射错误码和错误信息。此设置在调试期间也非常有用,因为它会有效地放大脚本中产生错误的点,从而可以非常快速地指出代码中有问题的潜在区域(记住:如果异常导致脚本终止,则事务被自动回滚)。

异常模式另一个非常有用的是,相比传统 PHP 风格的警告,可以更清晰地构建自己的错误处理,而且比起静默模式和显式地检查每种数据库调用的返回值,异常模式需要的代码/嵌套更少。

?
注意:不管当前是否设置了 PDO::ATTR_ERRMODE ,如果连接失败, PDO::__construct() 将总是抛出一个 PDOException 异常。未捕获异常是致命的。

PDO错误静默模式: PDO :: ERRMODE_SILENT

?


 

PDO错误警告模式: PDO :: ERRMODE_WARNING

?


PDO错误异常模式: PDO :: ERRMODE_EXCEPTION

?


6.PDO预处理语句

预处理的意思是先提交sql语句到mysql服务端,执行预编译,客户端执行多条结构相同的sql语句时,只需上传输入参数即可,这点和存储过程有点相似。

有两种语法形式:

?
1.问号占位符代码如下:

?
"; //给占位符赋值形式2 $stmt->execute(array(3,'索尼')); $resultSet = $stmt->fetchAll(); print_r($resultSet); } catch (PDOException $e) { echo $e->getMessage(); } ?>

2.命名占位符代码如下:

?
"; //给占位符赋值形式2 $stmt->execute(array(":v1"=>3,":v2"=>'索尼')); $resultSet = $stmt->fetchAll(); print_r($resultSet); } catch (PDOException $e) { echo $e->getMessage(); } ?> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: