转载 pdo

PDO一是PHP数据对象(PHP Data Object)的缩写

为什么要讲PDO:

(1)市面上使用最多的,大部分企业使用PDO

(2)Mysqli  只支持MySQL数据库,PDO支持大部分数据库

(3)以后做的项目都是使用PDO作为数据库抽象层来实现的

mysqli------是mysql数据库的加强:

(预处理机制)

(错误处理机制)

(采用了面向对象的编程模式)

一、PHP如何操作数据库

与具体数据库的扩展:php想操作那个数据库,需要开启这个数据库的扩展,提供操作这个数据库的函数

二、什么是PDO

PDO是一个mysql官方封装的,基于面向对象编程思想的,使用c语言开发的数据库抽象层

三、PDO数据库抽象的概念:

PDO抽象类

它是封装的一个类,就是一个控制数据库的新的操作方法

将具体的操作数据库的代码封装到数据库抽象层,如果出项数据库转移,只需在php代码里高速数据库抽象层,你去使用哪一个数据库就可以了

通过代码引出PDO

<?php

//写一个函数,根据传递的参数来操作不同的数据库

function mysql_db($type){

if($type==‘mysql‘){

mysql_connect();

mysql_select_db();

}elseif ($type==‘mssql‘){

mssql_connect();

mssql_query();

}elseif ($type==‘oracle‘){

// 具体操作某个数据库的函数

}

}

mysql_db(‘mysql‘);

function mysql_q($type,$sql){

if($type==‘mysql‘){

mysql_query($sql);

}

}

?>

一、     如何使用PDO

和当前使用mysql非常像

要想使用mysql需要开启mysql扩展,

需想使用PDO,需要开启PDO扩展

获得PDO对象,调用方法

(1)要开启pdo驱动

Extension = php_pdo.dll

Extension = php_pdo_sqlite.dll

Extension = php_pdo_mysql.dll

开启这个扩展(驱动),就可以使用这个扩展给我们提供类了

(2)使用这个类,实例化这个类,调用属性和方法

<?php

//使用PDO操作数据库

//第一个参数:连接数据库的类型:主机名;数据库名

$dsc = ‘mysql:host=localhost;dbname=mysql_text‘;

$user = ‘root‘;

$pass = ‘123‘;

$pdo = new PDO($dsc,$user,$pass);//实例化一个类的时候,会自动的先调用__construct()构造函数

//var_dump($pdo);

//执行sql语句获得

$sql = ‘select*fromgoods‘;

$result = $pdo->query($sql);//query方法返回的是PDOStatement对象

//如果想获得具体的数据,需要调用对象的方法:fetchAll();参数是类常量,表示返回什么样的数据

$rows = $result->fetchAll(PDO::FETCH_BOTH);

//var_dump($rows);

//更新数据库的操作

$sql = ‘update goods set goods_name="lalala" wheregoods_id=3‘;

//执行增删改的语句,exec()方法,执行查询的语句 query()

//exec()返回受影响的函数      query()返回PDOStatement对象

$nums = $pdo->exec($sql);

var_dump($nums);

?>

二、     PDO预编译机制

先将sql语句的数据部分和费数据部分分离开————》将不带数据的部分预编译一下prepare()————》在编译结果上绑定数据bandparam()————》执行编译结果execute()

预编译的好处:1、减少了编译的字符数,编译的速度提高

2、如果再次执行同样的sql语句,直接绑定数据,减少编译sql语句时间

写代码实现PDO的预编译(与处理机制)

<?php

//预编译:PDO::prepare($sql);   返回PDOStatement对象

//绑定数据PDOStamentt->bindParam();  给预编译的结果绑定数据

//执行编译结果 PDOStament->execute();

//使用PDO操作数据库

//第一个参数:连接数据库的类型:主机名;数据库名

$dsn  = ‘mysql:host=localhost;dbname=mysql_text‘;

$user = ‘root‘;

$pass = ‘123‘;

$pdo = new PDO($dsn,$user,$pass);

//var_dump($pdo);

//预编译:prepare();参数是不带数据的sql语句

//先将sql语句中的数据部分用占位符代替 :占位符名称

$sql = ‘insert intogoods values(null,:name,:price,:number)‘;

$smt = $pdo->prepare($sql);  //返回一个PDOStament 对象

//绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据

$goods_name= ‘surface‘;

$goods_price= ‘3500‘;

$goods_num= ‘41‘;

$smt->bindParam(‘:name‘,$goods_name);

$smt->bindParam(‘:price‘,$goods_price);

$smt->bindParam(‘:number‘,$goods_num);

$smt->execute();

?>

三、     PDO的错误处理机制:

(1)静默模式

默认情况下与mysql处理方式一致,不现实错误信息(静默模式)但是我们可以通过固定的方法获得错误信息

(2)警告模式

//更改属性设置错误处理模式

$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

(3)异常模式,当发生错误时,抛出一个异常

$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$sql = ‘select*fromgood‘;

try {

//尝试可能会处错误的代码

$pdo ->query($sql);

}catch (PDOException $e){

//现在捕获异常后,自己看着办,是让他显示出来呢,还是输出到日志文件里呢?

//通常是将错误信息输出到日志文件里

var_dump($e->getMessage());

file_put_contents(‘D://mysql.log‘,$e->getMessage());

}

时间: 2024-10-11 20:34:51

转载 pdo的相关文章

PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)-转载

用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢? 这篇文章将会介绍这两种方式的不同点,数据库的支持.稳定性.性能等问题. 概述   PDO MySQLi Database support 12 different drivers MySQL only API OOP OOP + procedural Connection Easy Easy Named parameters Yes No Object mapping Yes Yes Prepared stat

PHP中MySQL、MySQLi和PDO的用法和区别【原创】

对于一个初学PHP的自己,对数据库的连接有着很大的疑惑,从Java转到PHP.数据库连接变了,以前只知道JDBC连接数据库,或者直接用框架调用,对于的PHP的数据库连接方式,及其应用.不是很了解,于是查阅了很多资料及自己实际操作,写下自己的一点总结笔记. PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然可以与MySQL4.1.3或更新的数 : 据

PDO预处理语句PDOStatement对象使用总结

PDO预处理语句PDOStatement对象使用总结 PDO对预处理语句的支持需要使用PDOStatement类对象,但该类对象并不是通过NEW关键字实例化出来的,而是通过PDO对象中的prepare()方法,在数据库服务器中准备好一个预处理的SQL语句后直接返回的.如果通过之前执行PDO对象中的query()方法返回的PDOStatement类对象,只代表的是一个结果集对象.而如果通过执行PDO对象中的prepare()方法产生的PDOStatement类对象,则为一个查询对象,能定义和执行参

PDO进行sql报表编制结果集介绍及操作(两)

<span style="font-size:18px;">一个:运行准备好的语句和绑定参数insert try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 參数 --

使用 mysql PDO 防止sql注入

技巧: 1. php升级到5.3.6+,生产环境强烈建议升级到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞. 2. 若使用php 5.3.6+, 请在在PDO的DSN中指定charset属性3. 如果使用了PHP 5.3.6及以前版本,设置PDO::ATTR_EMULATE_PREPARES参数为false(即由MySQL进行变量处理),php 5.3.6以上版本已经处理了这个问题,无论是使用本地模拟prepare还是调用mysql server的prep

PHP学习笔记之PDO

1. 何为PDO? PDO(PHP数据对象) 是一个轻量级的.具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法使用.它所提供的数据接入抽象层,具有与具体数据库类型无关的优势,为它所支持的数据库提供统一的操作接口.目前支持的数据库有Cubrid.FreeTDS / Microsoft SQL Server / Sybase.Firebird/Interbase 6.IBM DB2.IBM Informix D

Centos中安装PHP的PDO MySQL扩展的教程

一聚教程网 >操作系统>>CentOS > Centos中安装PHP的PDO MySQL扩展的教程 www.111cn.net 编辑:Bolshevik 来源:转载 天在寻思着安装 Drupal 玩一下,在安装的过程中发现数据库选项只支持 SQLite 而没有 MySQL.纳尼?为什么会这样?结果发现没有编译安装PDO MySQL导致的.于是赶紧更新LAMP一键安装脚本. PHP Data Objects(PDO)扩展为 PHP 访问数据库定义了一个轻量级的一致接口.实现 PDO

PHP 精典汇总(转载)

//语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变量名建议用下划线方式分隔 // $var_name 函数名建议用驼峰命名法 // varName 定界符建议全大写 // <<<DING, <<<'DING' 文件名建议全小写和下划线.数字 // func_name.php 私有属性名.方法名建议加下划线 // private

【转载】C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CExample {private:     int a;public:     CExample(int b)     { a=b;}     void Show ()     {        cout<