2019独角兽企业重金招聘Python工程师标准>>>

--PDO的含义

PDO是PhP Date Object的简称,它是一个数据库访问抽象层,可以访问各种数据库。以后发展趋势是使用统一的接口替代各种单独的模块。

PDO借助于驱动,连接各个数据库。

--安装PDO (windows下)

版本要求:

php5.1以及以后版本的程序包里已经带了;
php5.0.x则要到pecl.php.net下载,放到你的扩展库,就是PHP所在的文件夹的ext文件夹下;
手册上说5.0之前的版本不能运行PDO扩展。
配置:
修改你的php.ini配置文件,使它支持pdo.(php.ini这个东西没有弄懂的话,先弄清楚,要修改调用你的phpinfo()函数所显示的那个php.ini)
extension=php_pdo.dll前面的分号去掉,‘;’是php配置文件注释符号,这个扩展是必须的。
往下还有:
;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
各个扩展所对应的数据库是:

Driver name    Supported databases
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 and SQLite 2

你要使用哪种数据库,只要把相应的扩展前的注释符号";"去掉就可以了。

--PDO相关的类

PDO有3个类:

  • PDO类,与数据库连接,数据库执行相关。
  • PDOStatement类,预处理类,处理结果集类。
  • PDOException类,处理异常。

PDO的方法比mysqli少,但实现的功能一样。要使用好PDO,需要用好PDO中的常量。

----------------PDO类----------------

--PDO中连接MySQL(或其他DBMS),选择数据库

PDO连接数据库的方法:创建一个PDO对象,在构造函数中连接MySQL。

class PDO {  PDO __construct ( string dsn [, string username [, string password [, array driver_options]]] ) }

dsn(data source name)数据源名,包含主机位置,数据库名,所连接的哪种数据库的驱动名。在PDO所支持的各个驱动里面有dsn的详细说明,比如mysql的驱动,他的dsn是:

The PDO_MYSQL Data Source Name (DSN) is composed of the following elements:   DSN prefix  The DSN prefix is mysql:.   host  The hostname on which the database server resides.   port  The port number where the database server is listening.   dbname  The name of the database.   unix_socket  The MySQL Unix socket (shouldn't be used with host or port).
举例:
$pdo = new PDO("mysql:host=localhost;port=3307;dbname=testdb","root","123456");

红色的部分就是dsn,驱动是mysql,主机位置是localhost,端口是3307,数据库名是testdb。

数据库连接的例子:

$dbms='mysql';     //数据库类型mysql对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数了 $host='localhost'; //数据库主机名 $dbName='test';    //使用的数据库 $user='root';      //数据库连接用户名 $pass='';          //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; // try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象,就是创建了数据库连接对象$dbh 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)); 参考:http://www.phpv.net/html/1579.html

--预定义常量

PDO中的成员函数没有mysqli那么多,主要因为它有很多预定义常量,借助于预定义常量一个函数可以完成许多功能。如:使用 PDO::ATTR_SERVER_VERSION,PDO::ATTR_SERVER_INFO可以用getAttribute(int attribute)获得服务器版本,服务器信息。这些信息保存在成员属性中。

--读取成员属性

借助预定义常量,向

向class PDO {
mixed getAttribute ( int attribute )
}

函数传值,可以获得成员属性,获取如服务器版本,服务器信息等信息。

--设置成员属性

借助预定义常量,向

class PDO {  bool setAttribute ( int attribute, mixed value ) }

函数传值,可以设置成员属性。

--PDO的执行语句

PDO有3个方法执行SQL语句:exec(),query(),prepare()。

  • exec()用来执行能影响行数的语句。如update,delete语句。
  • query()用来执行有返回结果集的语句。如SELECT语句。
  • prepare()执行预处理语句。

--exec()语句

class PDO { int exec ( string statement ) }

用来执行能影响行数的语句,返回 影响的行数。statement为SQL语句。

--获取自动增长的ID

class PDO {   string lastInsertId ( [string name] )  } 

参数name指出了哪个列应该被返回,如果数据库只有1个自动增长的列,该参数可以省略。

--query()语句

class PDO {   PDOStatement query ( string statement )  } 

返回预处理对象

--PDO处理预处理

确定是否为InnoDB表(MYISAM不支持事务处理)。

  • 首先在建立PDO对象,或者使用setattribute(int attribute)方法,关闭自动提交。
  • 使用PDO方法beginTransaction()开启事务处理。

class PDO {   bool beginTransaction ( void )  } 

  • 在try{}中包含事务语句,如果任何一条语句出错,则抛出异常,跳转到catch。在每条SELECT语句后判断是否影响到行数,如果没有影响到1行,则抛出异常。
  • 在try{}的最后1句,使用PDO方法commit(),提交事务;
  • 在catch(){}中包含异常处理语句,处理异常。
  • 使用setattribute(int attribute)方法,开启自动提交。

----------------PDOStatement类----------------

 --PDOStatement类的作用

许多成熟的数据库都支持预处理语句(Prepared Statements)的概念。它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它。预处理语句具有两个主要的优点:

  1. 查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要 执行查询的计划。对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。通过使用一个预 处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。
  2. 传给预处理语句的参数不需要使用引号,底层驱动会为你处理这个。如果你的应用独占地使用预处理语句,你就可以确信没有SQL注入会发生。(然而,如果你仍然在用基于不受信任的输入来构建查询的其他部分,这仍然是具有风险的)
  • 准备一个语句。
  • 处理结果集。

预处理类执行SQL的效率高,安全性高,是推荐使用的方法。

--获得预处理对象

class PDO {   PDOStatement prepare ( string statement [, array driver_options] )  } 

使用PDO对象的prepare(string statement)方法,获得预处理对象。statement是SQL语句。执行完该方法,在数据库端就已经接受到SQL语句并编译完成等待分配数据

--PDOStatement中的占位符

  • 索引形式的:'?参数',此占位符按索引顺序使用。
  • 关联形式的:'名字参数',此占位符与顺序无关。

名字参数的格式是   ':参数名称'(冒号+参数名称)

--绑定参数

使用PDOStatement中的bindParam(mixed parameter)方法,绑定参数。

class PDOStatement {   bool bindParam ( mixed parameter, mixed &variable [, int data_type  [, int length [, mixed driver_options]]] )  } 

例如:

$sth->bindParam(':calories', $calo); 

sth是PDOStatement类的对象,$calo是用于绑定的变量,:calories是prepare所准备的参数。每次只绑定一个变量。有几个 参数需要绑定,就执行几次bindParam(mixed parameter,mixed $variable)。

--执行准备语句

使用PDOStatement中的execute()方法,执行准备语句。

class PDOStatement {   bool execute ( [array input_parameters] )  } 

成功返回true,失败返回false。

  • 如果在前面绑定了参数,execute的参数为空。
  • 如果前面没有绑定参数,也可以在execute里面的数组放参数对应关系,形式如下:

$sth = $dbh->prepare('SELECT name, colour, calories      FROM fruit      WHERE calories < :calories AND colour = :colour');  $sth->execute(array(':calories' => $calories, ':colour' => $colour)); 

甚至可以把表单中的变量名字起成参数名,然后直接execute($_POST)

--获取结果集

使用PDOStatement中的fetch([int fetch_style [, int cursor_orientation [, int cursor_offset]]] )方法,获取结果集中的1行。

class PDOStatement {   mixed fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] )  } 

成功返回true,失败返回false,常配合while()使用。

默认情况下以关联数组、索引数组两种方式返回数据,可以通过在参数中设置返回方式:

  • 如果参数为PDO::FETCH_ASSOC,只返回关联数组;
  • 如果参数为PDO::FETCH_NUM,返回索引数组;
  • 如果参数为PDO::FETCH_BOTH,两种都返回(默认方式)

可以使用PDOStatement中的setFetchMode()方法,设置获取模式,这样不用在每个fetch()函数中设置了。

class PDOStatement {   bool setFetchMode ( int PDO::FETCH_CLASS, string classname, array ctorargs )  } 

还可以使用PDOStatement中fetchAll([int fetch_style [, int column_index]] )方法,一次获取结果集的所有数据,以二维数组的方式返回。

--绑定列

使用PDOStatement的bindColumn ( mixed column, mixed &param [, int type] )方法绑定列,绑定列不影响绑定参数,实际上绑定列只是在结果集上绑定的(可以execute()后再绑定)。

class PDOStatement {   bool bindColumn ( mixed column, mixed &param [, int type] )  } 

绑定的列可以用列名,也可以用列的序号,如下:

$sql = 'SELECT name, colour, calories FROM fruit';    try {      $stmt = $dbh->prepare($sql);      $stmt->execute();        /* Bind by column number */      $stmt->bindColumn(1, $name);      $stmt->bindColumn(2, $colour);            /* Bind by column name */      $stmt->bindColumn('calories', $cals);        while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {        $data = $name . "\t" . $colour . "\t" . $cals . "\n";        print $data;      }    }    catch (PDOException $e) {      print $e->getMessage();    } 

输出结果如下:

apple   red     150  banana  yellow  175  kiwi    green   75  orange  orange  150  mango   red     200  strawberry      red     25 

--获取结果集行数

使用PDOStatement的rowCount(void)方法,可以获取结果集的行数。

class PDOStatement {   int rowCount ( void )  } 

--获取字段数

使用PDOStatement的columnCount( void )方法,可以获取结果集的字段数。

class PDOStatement {   int columnCount ( void )  } 

--获取字段信息

使用PDOStatement的getColumnMeta( int column )方法,可以获取字段信息。

class PDOStatement {   mixed getColumnMeta ( int column )  }      每次执行返回1个数组,包含某1列的信息,到最后1列返回false。

转载于:https://my.oschina.net/yoyo1987/blog/159140

php--PDO操作数据库相关推荐

  1. pdo mysql 建库_一帖让PHP小白彻底了解PDO操作数据库的方法

    php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) .在这三种方法中,"民间"很多是倾向于使用PDO, ...

  2. php pdo操作数据库

    POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成 ...

  3. php pdo 方法,PHP之pdo操作数据库

    PDO概述 1.PDO简介 PDO是PHP数据对象(PHP Data Object)的缩写. PDO扩展为PHP访问不同数据库定义了一个轻量级的.一致性的接口: PDO作用是统一各种数据库的访问接口, ...

  4. yaf mysql pdo 封装_PDO 操作数据库

    # PDO 操作数据库 *** Yaf 框架(3.0.5版本)目前并没有提供数据库 ORM 类,据鸟哥的博客来说,以后或许会提供.使用了 ORM 类为团队带来的便捷和规范,但是带来了性能的下降.直接使 ...

  5. PHP数据库扩展 - PDO操作

    PDO操作 PDO操作 描述:odp是php对数据库操作统一化的操作 语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号& ...

  6. php使用pdo操作mysql数据库实例_php5使用pdo连接数据库实例

    本文为大家介绍下php pdo的用法. 一,pdo简介 pdo(php data object) 是php 5 中加入的东西,是php 5新加入的一个重大功能,因为在php 5以前的php4/php3 ...

  7. php使用pdo操作mysql数据库实例_php使用PDO操作MySQL数据库实例_PHP

    本文实例讲述了php使用PDO操作MySQL数据库的方法.分享给大家供大家参考.具体分析如下: PDO是mysql数据库操作的一个公用类,我们不需要进行自定类就可以直接使用pdo来操作数据库,但是在p ...

  8. php pdo操作mysql_PHP操作数据库详细(PDO)

    PHP 5.1 发布时将附带一个全新的数据库连接层,即 PHP Data Objects (PDO).虽然 PHP 一直都拥有很好的数据库连接,但 PDO 让 PHP的数据库操作 达到一个新的高度.P ...

  9. PHP操作数据库,不推荐使用mysql函数,而推荐使用mysqli和PDO函数

    PHP操作数据库,不推荐使用mysql函数,推荐使用mysqli和PDO函数. 转载于:https://www.cnblogs.com/npk19195global/p/4550013.html

  10. PHP pdo查询sqlite,PHP PDO 操作 sqlite数据库 案例

    PHP PDO 操作 sqlite数据库 案例 1.需求: 已知: 1).一个json文件,里面是一个二维数组,数组解析出来为: array ( 0 => array ( 'title' =&g ...

最新文章

  1. python输出print(x+y)_Python语句序列“x='car';y=2; print(x+y)”的输出结果是_学小易找答案...
  2. 【原创】大数据基础之Ambari(1)简介、编译安装、使用
  3. Java GregorianCalendar computeTime()方法与示例
  4. mimemultipart java_最佳实践 – 发送javamail mime multipart电子邮件和gmail
  5. 随想录(符号数据与无符号数据)
  6. 数据处理利器python与scala基本数据结构对比分析1-大数据ML样本集案例实战
  7. 《redis设计与实现:第一部分》
  8. 转载 elm中文手册
  9. 如何选择DDoS防御服务器
  10. linux内核 自旋锁示例,自旋锁(示例代码)
  11. 蓝色——Love is Blue
  12. 解析解【闭式解(closed-form solution)】和数值解
  13. The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You mu
  14. php斯芬克斯,找回自我 走出斯芬克斯之谜
  15. 最详细的整套模具设计思路与流程 !
  16. 滤芯怎么换 石头机器人_石头扫地机滤网怎么洗_小米扫地机滤网更换步骤_小米扫地机滤网...
  17. 当再多大公司慢慢的放弃微软的技术时, 不知大家怎想?
  18. 软件定义安全的一点点理解
  19. 软考 - 软考软件设计师考试总结(2018上半年)
  20. 将WAR文件部署到Tomcat的5种方法

热门文章

  1. python魔法属性_python魔法方法-属性转换和类的表示详解
  2. 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
  3. python中矩阵除法_Python numpy矩阵处理运算工具用法汇总
  4. python-图书管理系统5-全部代码
  5. python-gui-pyqt5的使用方法-1
  6. ARM:让Mali带来更极致的移动VR体验
  7. python-78:对日期格式进行处理
  8. 【.bash_profile 与 .bashrc 的区别】
  9. windows xp下Apache2.2.11整合Tomcat6.0.20
  10. VC++动态链接库编程之DLL木马(转)