php pdo操作数据库示例


Posted in PHP onMarch 10, 2017

POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题。

PDO的特点:

性能。PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训。因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性。

能力。PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的方便访问。

简单。PDO 旨在使您能够轻松使用数据库。API 不会强行介入您的代码,同时会清楚地表明每个函数调用的过程。

运行时可扩展。PDO 扩展是模块化的,使您能够在运行时为您的数据库后端加载驱动程序,而不必重新编译或重新安装整个 PHP 程序。例如,PDO_OCI 扩展会替代 PDO 扩展实现 oracle 数据库 API。还有一些用于 MySQL、PostgreSQL、ODBC 和 Firebird 的驱动程序,更多的驱动程序尚在开发。

PDO 安装

你可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展。

1.在 Unix /Linux系统上安装 PDO

 在Unix上或Linux上你需要添加以下扩展:

extension=pdo.so

2.在Windows安装pdo

PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件,并添加以下扩展:

extension=php_pdo.dll

除此之外还有以下对应的各种数据库扩展:

;extension=php_pdo_firebird.dll
;extension=php_pdo_informix.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll

打开php.ini把上面所有行前面的分号去掉就可以了。

在设定好这些配置后,我们需要重启PHP 或 Web服务器。

下面我们以mysql为例来使用pdo: 

<?php
$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass='';  //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";


try {
 $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
 echo "连接成功<br/>";
 /*你还可以进行一次搜索操作
 foreach ($dbh->query('SELECT * from FOO') as $row) {
 print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
 }
 */
 $dbh = null;
} catch (PDOException $e) {
 die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));

?>

再来看看pdo的详细介绍:

1.预定义常量:

PDO::PARAM_BOOL (integer) 表示布尔数据类型。
PDO::PARAM_NULL (integer) 表示 SQL 中的 NULL 数据类型。
PDO::PARAM_INT (integer) 表示 SQL 中的整型。
PDO::PARAM_STR (integer) 表示 SQL 中的 CHAR、VARCHAR 或其他字符串类型。
PDO::PARAM_LOB (integer) 表示 SQL 中大对象数据类型。
PDO::PARAM_STMT (integer) 表示一个记录集类型。当前尚未被任何驱动支持。
PDO::PARAM_INPUT_OUTPUT (integer) 指定参数为一个存储过程的 INOUT 参数。必须用一个明确的 PDO::PARAM_* 数据类型跟此值进行按位或。
PDO::FETCH_LAZY (integer) 指定获取方式,将结果集中的每一行作为一个对象返回,此对象的变量名对应着列名。PDO::FETCH_LAZY 创建用来访问的对象变量名。在 PDOStatement::fetchAll() 中无效。
PDO::FETCH_ASSOC (integer) 指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则PDO::FETCH_ASSOC每个列名只返回一个值。
PDO::FETCH_NAMED (integer) 指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则PDO::FETCH_ASSOC每个列名 返回一个包含值的数组。
PDO::FETCH_NUM (integer) 指定获取方式,将对应结果集中的每一行作为一个由列号索引的数组返回,从第 0 列开始。
PDO::FETCH_BOTH (integer) 指定获取方式,将对应结果集中的每一行作为一个由列号和列名索引的数组返回,从第 0 列开始。
PDO::FETCH_OBJ (integer) 指定获取方式,将结果集中的每一行作为一个属性名对应列名的对象返回。
PDO::FETCH_BOUND (integer) 指定获取方式,返回 TRUE 且将结果集中的列值分配给通过 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法绑定的 PHP 变量。
PDO::FETCH_COLUMN (integer) 指定获取方式,从结果集中的下一行返回所需要的那一列。
PDO::FETCH_CLASS (integer) 指定获取方式,返回一个所请求类的新实例,映射列到类中对应的属性名。注意: 如果所请求的类中不存在该属性,则调用 __set() 魔术方法
PDO::FETCH_INTO (integer) 指定获取方式,更新一个请求类的现有实例,映射列到类中对应的属性名。
PDO::FETCH_FUNC (integer) 允许在运行中完全用自定义的方式处理数据。(仅在 PDOStatement::fetchAll() 中有效)。
PDO::FETCH_GROUP (integer) 根据值分组返回。通常和 PDO::FETCH_COLUMN 或 PDO::FETCH_KEY_PAIR 一起使用。
PDO::FETCH_UNIQUE (integer) 只取唯一值。
PDO::FETCH_KEY_PAIR (integer) 获取一个有两列的结果集到一个数组,其中第一列为键名,第二列为值。自 PHP 5.2.3 起可用。
PDO::FETCH_CLASSTYPE (integer) 根据第一列的值确定类名。
PDO::FETCH_SERIALIZE (integer) 类似 PDO::FETCH_INTO ,但是以一个序列化的字符串表示对象。自 PHP 5.1.0 起可用。从 PHP 5.3.0 开始,如果设置此标志,则类的构造函数从不会被调用。
PDO::FETCH_PROPS_LATE (integer) 设置属性前调用构造函数。自 PHP 5.2.0 起可用。
PDO::ATTR_AUTOCOMMIT (integer) 如果此值为 FALSE ,PDO 将试图禁用自动提交以便数据库连接开始一个事务。
PDO::ATTR_PREFETCH (integer) 设置预取大小来为你的应用平衡速度和内存使用。并非所有的数据库/驱动组合都支持设置预取大小。较大的预取大小导致性能提高的同时也会占用更多的内存。
PDO::ATTR_TIMEOUT (integer) 设置连接数据库的超时秒数。
PDO::ATTR_ERRMODE (integer) 关于此属性的更多信息请参见 错误及错误处理 部分。
PDO::ATTR_SERVER_VERSION (integer) 此为只读属性;返回 PDO 所连接的数据库服务的版本信息。
PDO::ATTR_CLIENT_VERSION (integer) 此为只读属性;返回 PDO 驱动所用客户端库的版本信息。
PDO::ATTR_SERVER_INFO (integer) 此为只读属性。返回一些关于 PDO 所连接的数据库服务的元信息。
PDO::ATTR_CONNECTION_STATUS (integer)
PDO::ATTR_CASE (integer) 用类似 PDO::CASE_* 的常量强制列名为指定的大小写。
PDO::ATTR_CURSOR_NAME (integer) 获取或设置使用游标的名称。当使用可滚动游标和定位更新时候非常有用。
PDO::ATTR_CURSOR (integer) 选择游标类型。 PDO 当前支持 PDO::CURSOR_FWDONLY 和 PDO::CURSOR_SCROLL。一般为 PDO::CURSOR_FWDONLY,除非确实需要一个可滚动游标。
PDO::ATTR_DRIVER_NAME (string) 返回驱动名称。 使用 PDO::ATTR_DRIVER_NAME 的例子: getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { echo "Running on mysql; doing something mysql specific here\n"; } ?>
PDO::ATTR_ORACLE_NULLS (integer) 在获取数据时将空字符串转换成 SQL 中的 NULL 。
PDO::ATTR_PERSISTENT (integer) 请求一个持久连接,而非创建一个新连接。关于此属性的更多信息请参见 连接与连接管理 。
PDO::ATTR_STATEMENT_CLASS (integer)
PDO::ATTR_FETCH_CATALOG_NAMES (integer) 将包含的目录名添加到结果集中的每个列名前面。目录名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。
PDO::ATTR_FETCH_TABLE_NAMES (integer) 将包含的表名添加到结果集中的每个列名前面。表名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。
PDO::ATTR_STRINGIFY_FETCHES (integer)
PDO::ATTR_MAX_COLUMN_LEN (integer)
PDO::ATTR_DEFAULT_FETCH_MODE (integer) 自 PHP 5.2.0 起可用。
PDO::ATTR_EMULATE_PREPARES (integer) 自 PHP 5.1.3 起可用。
PDO::ERRMODE_SILENT (integer) 如果发生错误,则不显示错误或异常。希望开发人员显式地检查错误。此为默认模式。关于此属性的更多信息请参见 错误与错误处理 。
PDO::ERRMODE_WARNING (integer) 如果发生错误,则显示一个 PHP E_WARNING 消息。关于此属性的更多信息请参见 错误与错误处理。
PDO::ERRMODE_EXCEPTION (integer) 如果发生错误,则抛出一个 PDOException 异常。关于此属性的更多信息请参见 错误与错误处理。
PDO::CASE_NATURAL (integer) 保留数据库驱动返回的列名。
PDO::CASE_LOWER (integer) 强制列名小写。
PDO::CASE_UPPER (integer) 强制列名大写。
PDO::NULL_NATURAL (integer)
PDO::NULL_EMPTY_STRING (integer)
PDO::NULL_TO_STRING (integer)
PDO::FETCH_ORI_NEXT (integer) 在结果集中获取下一行。仅对可滚动游标有效。
PDO::FETCH_ORI_PRIOR (integer) 在结果集中获取上一行。仅对可滚动游标有效。
PDO::FETCH_ORI_FIRST (integer) 在结果集中获取第一行。仅对可滚动游标有效。
PDO::FETCH_ORI_LAST (integer) 在结果集中获取最后一行。仅对可滚动游标有效。
PDO::FETCH_ORI_ABS (integer) 根据行号从结果集中获取需要的行。仅对可滚动游标有效。
PDO::FETCH_ORI_REL (integer) 根据当前游标位置的相对位置从结果集中获取需要的行。仅对可滚动游标有效。
PDO::CURSOR_FWDONLY (integer) 创建一个只进游标的 PDOStatement 对象。此为默认的游标选项,因为此游标最快且是 PHP 中最常用的数据访问模式。
PDO::CURSOR_SCROLL (integer) 创建一个可滚动游标的 PDOStatement 对象。通过 PDO::FETCH_ORI_* 常量来控制结果集中获取的行。
PDO::ERR_NONE (string) 对应 SQLSTATE '00000',表示 SQL 语句没有错误或警告地成功发出。当用 PDO::errorCode() 或 PDOStatement::errorCode() 来确定是否有错误发生时,此常量非常方便。在检查上述方法返回的错误状态代码时,会经常用到。
PDO::PARAM_EVT_ALLOC (integer) 分配事件
PDO::PARAM_EVT_FREE (integer) 解除分配事件
PDO::PARAM_EVT_EXEC_PRE (integer) 执行一条预处理语句之前触发事件。
PDO::PARAM_EVT_EXEC_POST (integer) 执行一条预处理语句之后触发事件。
PDO::PARAM_EVT_FETCH_PRE (integer) 从一个结果集中取出一条结果之前触发事件。
PDO::PARAM_EVT_FETCH_POST (integer) 从一个结果集中取出一条结果之后触发事件。
PDO::PARAM_EVT_NORMALIZE (integer) 在绑定参数注册允许驱动程序正常化变量名时触发事件。

2.PDO 类:

  • PDO::beginTransaction — 启动一个事务
  • PDO::commit — 提交一个事务
  • PDO::__construct — 创建一个表示数据库连接的 PDO 实例
  • PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
  • PDO::errorInfo — 返回最后一次操作数据库的错误信息
  • PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
  • PDO::getAttribute — 取回一个数据库连接的属性
  • PDO::getAvailableDrivers — 返回一个可用驱动的数组
  • PDO::inTransaction — 检查是否在一个事务内
  • PDO::lastInsertId — 返回最后插入行的ID或序列值
  • PDO::prepare — 备要执行的SQL语句并返回一个 PDOStatement 对象
  • PDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集
  • PDO::quote — 为SQL语句中的字符串添加引号。
  • PDO::rollBack — 回滚一个事务
  • PDO::setAttribute — 设置属性
    • PDOStatement 类:
    • PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
    • PDOStatement::bindParam — 绑定一个参数到指定的变量名
    • PDOStatement::bindValue — 把一个值绑定到一个参数
    • PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
    • PDOStatement::columnCount — 返回结果集中的列数
    • PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
    • PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
    • PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
    • PDOStatement::execute — 执行一条预处理语句
    • PDOStatement::fetch — 从结果集中获取下一行
    • PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
    • PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
    • PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
    • PDOStatement::getAttribute — 检索一个语句属性
    • PDOStatement::getColumnMeta — 返回结果集中一列的元数据
    • PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
    • PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
    • PDOStatement::setAttribute — 设置一个语句属性
    • PDOStatement::setFetchMode — 为语句设置默认的获取模式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
Laravel登录失败次数限制的实现方法
Aug 26 PHP
PHP 时间处理类Carbon
May 20 PHP
yii2简单使用less代替css示例
Mar 10 #PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 #PHP
Yii2.0中使用js异步删除示例
Mar 10 #PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 #PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 #PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 #PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 #PHP
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
javaScript基础详解
2017/01/19 Javascript
js 颜色选择插件
2017/01/23 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
微信小程序日历效果
2018/12/29 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
公司年会搞笑主持词
2014/03/24 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
实习生个人总结范文
2015/02/28 职场文书
开学典礼观后感
2015/06/15 职场文书