php pdo操作数据库示例

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 的例子:

<?php if ($db->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 — 为语句设置默认的获取模式。

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

(0)

相关推荐

  • PHP中关于PDO数据访问抽象层的功能操作实例

    PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PDO对象 $dsn ="mysql:dbname=mydb;host=localhost";//数据库类型:dbname=数据库名称;host=链接的ip或本机 $pdo =new PDO($dsn,"root","root");//$dsn,帐号,密

  • PHP数据对象PDO操作技巧小结

    本文实例讲述了PHP数据对象PDO操作技巧.分享给大家供大家参考,具体如下: PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. <?php try { $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8"; $user = 'root'; $psw ='root'; $pdo = new PDO($dsn,$user,$psw); $sql = 'sele

  • php数据库抽象层 PDO

    下面就来介绍一下数据库抽象层PDO的使用: PDO(PHP Data Objects)是一个轻量级的PHP扩展,提供了一个数据访问抽象层.还要就是PDO只能在PHP5.0以上版本使用. 下面来介绍一下PDO常用的预定义常量: PDO::PARAM_BOOL (integer) 表示布尔数据类型 PDO::PARAM_NULL (integer) 表示数据类型为NULL的SQL PDO::PARAM_INT (integer)  表示为integer数据类型的SQL PDO::PARAM_STR 

  • 详解PHP中的PDO类

     简介 咱一起来看看PDO类.PDO是PHP Data Objects的缩写,它被描述为"在PHP中访问数据库的轻量级,兼容性的接口".尽管它的名字不咋好听,但PDO是一个在PHP中访问数据库会让人喜爱的方式. 与MySQLi的不同 MySQLi和PDO很相似,都有两方面主要区别: 1.MySQLi只能访问MySQL,但PDO可以访问12种不同的数据库 2.PDO没有普通函数调用(mysqli_*functions) 开始步骤 首先,你得确定一下你的PHP是否安装了PDO插件.你可以用

  • PHP PDO操作总结

    0x01:测试PDO是否安装成功 运行如下代码,如果提示参数错误,说明PDO已经安装,如果说明对象不存在,则修改PHP配置文件php.ini,取消php_pdo_yourssqlserverhere.extis前面的注释. 复制代码 代码如下: $test=new PDO(); 0x02:连接数据库 运行Apache服务器,确定服务器已经运行并且PDO安装成功,那么下面我们就来连接数据库吧. 复制代码 代码如下: $dsn = 'mysql:dbname=demo;host=localhost;

  • php pdo操作数据库示例

    POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训.因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性. 能力.PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的方便访问. 简单.PDO 旨在使您能够轻松使用数据库.API 不会强行介入您的代码,同时会清楚地表

  • PHP使用PDO操作数据库的乱码问题解决方法

    本文实例讲述了PHP使用PDO操作数据库的乱码问题解决方法.分享给大家供大家参考,具体如下: 当使用 PDO 连接操作数据库的时候,有时会出现:保存在数据库中的汉字为乱码.以文件为 UTF-8 格式,其解决方法如下: (1)实例化的对象直接执行 query() 方法或者 exec() 方法: <?php class DB { static public function getDB() { try { $_opts_values = array(PDO::ATTR_PERSISTENT=>tr

  • Node服务端实战之操作数据库示例详解

    目录 连接数据库 insert语句 简化新增sql update语句 delete语句 连接数据库 本系列是使用node作为服务器开发的操作过程记录,记录一下主要的内容并且整理过程的脉络,以初学者的方式将学习内容记录下来,从0到1逐步的学习node,教程使用过程中用到的是基于express的node框架. const mysql = require('mysql') const db = mysql.createPool({ host: 'localhost', user: 'root', pa

  • PHP的PDO操作简单示例

    本文实例讲述了PHP的简单PDO操作.分享给大家供大家参考,具体如下: 网上关于PDO的资料很多.这里就不累赘了. 这里我将PDO所有操作封装到一个类里方便操作. 类代码如下: class DB { //pdo对象 public $con = NULL; function DB() { $this->con = new PDO("mysql:host=127.0.0.1;dbname=dbtest", "root", "xxx", arra

  • laravel框架数据库配置及操作数据库示例

    本文实例讲述了laravel框架数据库配置及操作数据库.分享给大家供大家参考,具体如下: laravel 数据库配置 数据库配置文件为项目根目录下的config/database.php //默认数据库为mysql 'default' => env('DB_CONNECTION', 'mysql'), 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('

  • java使用jdbc操作数据库示例分享

    package dao; import java.sql.*; public class BaseDao { //oracle// private  static final String Dirver="oracle.jdbc.driver.OracleDriver";// private  static final String URL="jdbc:oracle:thin:@localhost:1521:XE";// private  static final

  • PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】

    本文实例讲述了PHP基于pdo的数据库操作类.分享给大家供大家参考,具体如下: 工作中需要操作sqlserver.oracle都是使用的这个类,当时是在别人的基础上改进了,现在分享下 <?php class Pdodb{ protected $pdo; protected $res; protected $config; /*构造函数*/ function __construct($config){ $this->Config = $config; $this->connect(); }

  • PHP基于PDO扩展操作mysql数据库示例

    本文实例讲述了PHP基于PDO扩展操作mysql数据库.分享给大家供大家参考,具体如下: SELECT //查单条 function get_sub_product() { $res_zz = $pdo->query("SELECT id FROM content WHERE is_publish = 0 LIMIT 1;"); $rep = $res_zz->fetch(); } //查多条 function get_sub_product() { $dsn = 'mys

  • PHP实现PDO操作mysql存储过程示例

    本文实例讲述了PHP实现PDO操作mysql存储过程.分享给大家供大家参考,具体如下: 一 代码 sql语句: create procedure pro_reg (in nc varchar(80), in pwd varchar(80), in email varchar(80),in address varchar(50)) begin insert into tb_reg (name, pwd ,email ,address) values (nc, pwd, email, address

  • PHP使用PDO操作sqlite数据库应用案例

    本文实例讲述了PHP使用PDO操作sqlite数据库.分享给大家供大家参考,具体如下: 1.需求: 已知: 1).一个json文件,里面是一个二维数组,数组解析出来为: array ( 0 => array ( 'title' => '九十九', ), 1 => array ( 'title' => '电脑九十九', ), 2 => array ( 'title' => '手机九十九', ), 3 => array ( 'title' => '手机电脑九十九

随机推荐