PDO面向对象操作数据库服务器

1、PDO是PHP新版中推荐的基于面向对象操作数据库服务器的方式。

开启PDO_mysql相关扩展:在php.ini中修改extension=php_pdo_mysql.dll

重启apache

2、PDO操作数据库的基本使用步骤

连接,认证,发送SQL,等待mysql服务器的执行结果,处理执行结果

3、pdo操作数据库的代码:

<?php

//实例化PDO对象

$dsn=‘mysql:host=localhost;port=3306;dbname=php34‘;

$username=‘root‘;

$password=‘123456‘;

//$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作

$driver_options=array(

PDO::MYSQL_ATTR_INIT_COMMAND=>‘SET NAMES UTF8‘,

);

$pdo=new PDO($dsn,$username,$password,$driver_options);

//***** var_dump($pdo);  //测试打印PDO是一个对象类型

//发送SQL到服务器等待执行SQL的结果,用pdo对象方法query(SQL)完成执行SQL

$sql="show databases";

$result=$pdo->query($sql);

//*****var_dump($result);  //打印结果object(PDOStatement)#2 (1) { ["queryString"]=> string(14) "show databases" }

//*****逻辑上,返回的是结果集,被PDOStatememt类对象封装管理

//*****PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象

//利用该结果对象,获得我们需要的数据

/*

$list=$result->fetchAll();

var_dump($list);  //默认返回关联和索引的集合,可以传递参数,进行配置

*/

//$list=$result->fetchAll(PDO::FETCH_ASSOC);

$list=$result->fetchAll(PDO::FETCH_NUM);

//var_dump($list);

//PDO对象的常用方法

// errorInfo()   错误信息,包含错误信息的数组

//errorCode()  错误代码

//处理错误信息

if(!$result=$pdo->query($sql)){

var_dump($pdo->errorInfo());

echo "<br/>";

var_dump($pdo->errorCode());

}

4、开启事务:   beginTransaction();

回滚事务:   rollback();

提交事务:   commit();

判断是否处于事务中: inTransaction();

5、最后形成的auto_increment字段的值:lastInsertID()

6、Exec()

又一个执行SQL的方法。

区别于query(),返回值类型不同。Exec()返回值类型为整型。(query()返回的是对象类型)。

该返回的整数,表示当前执行SQL所影响的记录数。

可见:

Query(), 执行查询类,show,select,desc

Exec(), 非查询类,insert,delete,update,DDL

注意:影响的记录数可能为0.但是不意味着执行失败

7、项目中对PDO的使用

使用PDO,实现与mysqlDB这个DAO对象外部操作一致的另外一种DAO的实现,可以做到,模型切换DAO,是不需要更改模型内的任何代码(热插拔,无缝切换)。

增加DAO的操作接口(I_DAO),使所有DAO的定义(mysql扩展,PDO扩展)都实现相同的DAO操作接口(I_DAO)

//DAO层操作接口

interface I_DAO{

public function getInstance($config);

public function query($sql);

public function getAll();

public function gerRow();

public function getOne();

public function escapeString();

}

class PDODB implements I_DAO{

}

class MySQLDB implements I_DAO{

}

8、预处理(预编译)的执行方式

一条SQL的执行,MySQL分成两大步骤:

①,编译;②,执行

如果:

连续执行多条结构相同的SQL:

编译的中间结果(语法树)应该是一致的。

应该将相同的结构,统一编译,每次使用不同的数据执行即可!

预编译:指的是预先编译SQL的结构的一种执行SQL的方法

9、编译统一的结构

$PDOStatement = $pdo->prepare(SQL的结构);

SQL结构中的数据部分,可以使用问好,或者冒号标签的语法来占用

$sql1="insert into team values(null,?)";

$sql2="insert into team values(null,:team_name)";

$stmt=$pdo->prepare($sql);

10、绑定数据到中间编译结果,语法:$PDOStatement->bindValue()

$stmt->bindValue(‘:team_name‘,‘球队‘);

11、执行  语法形式: $PDOStatement->execute();

$result=$stmt->execute();

12、预编译的优点:

更好的防止SQL注入,是因为预编译时,不需要用户的数据参与。编译时,结构固定,导致用户数据不能影响到SQL的结构。

普通的执行方法:

$pdo->query();

$pdo->exec()

如果需要防止SQL注入,需要人为的转义用户数据,使用的方式是$pdo->quote()方法。转义并使用引号包裹。

13、PDOStatement对象的常用方法

errorInfo()

errorCode()

使用PDOStatement->execute()方法执行失败时,错误信息由以上两个方法获得。

fetchColumn(index=0)

允许传递参数,表示获得第一条记录的第几个字段的值。

getOne()

Fetch()

getRow()

获取一条后,可以向后移动结果集指针。

FetchAll()

getAll()

rowCount();

统计处理的记录数:

影响了多少行(增删改)

结果集中存在多少行(查)。

closeCursor();

释放结果集光标。(建议fetch之后,手动释放)

14、数据据抽象层&驱动

PDO:PHP Data Object。

PDO是数据库抽象层的一种。

将多种数据库的操作,抽象出来,使用同一种语法完成。

示例代码:

<?php

//实例化PDO对象

$dsn=‘mysql:host=localhost;port=3306;dbname=php34‘;

$username=‘root‘;

$password=‘123456‘;

//$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作

$driver_options=array(

PDO::MYSQL_ATTR_INIT_COMMAND=>‘SET NAMES UTF8‘,

);

$pdo=new PDO($dsn,$username,$password,$driver_options);

//***** var_dump($pdo);  //测试打印PDO是一个对象类型

//发送SQL到服务器等待执行SQL的结果,用pdo对象方法query(SQL)完成执行SQL

$sql="show databases";

$result=$pdo->query($sql);

//*****var_dump($result);  //打印结果object(PDOStatement)#2 (1) { ["queryString"]=> string(14) "show databases" }

//*****逻辑上,返回的是结果集,被PDOStatememt类对象封装管理

//*****PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象

//利用该结果对象,获得我们需要的数据

/*

$list=$result->fetchAll();

var_dump($list);  //默认返回关联和索引的集合,可以传递参数,进行配置

*/

//$list=$result->fetchAll(PDO::FETCH_ASSOC);

$list=$result->fetchAll(PDO::FETCH_NUM);

//var_dump($list);

//PDO对象的常用方法

// errorInfo()   错误信息,包含错误信息的数组

//errorCode()  错误代码

//处理错误信息

if(!$result=$pdo->query($sql)){

var_dump($pdo->errorInfo());

echo "<br/>";

var_dump($pdo->errorCode());

}

时间: 2024-11-03 21:18:35

PDO面向对象操作数据库服务器的相关文章

Mysqli面向对象操作数据库

Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php $connect=new mysqli('localhost','wy','000000','test') //连接数据库 if (!$connect){ die("连接失败"); } //判断是否存在 $sql="select * from gubeiqing"; /

[PHP] - PDO事务操作

PHP使用PDO事务操作数据库. 参考文章: http://php.ncong.com/mysql/pdo/pdo_shiwu.html 上代码: <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php t

php pdo操作数据库

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

Hibernate (面向对象的数据库操作)

JPA,java persistance api,java持久层接口,即与数据库打交道的一些接口.实现交给各个厂商去实现. ORM,Object/Relation Mapping,对象/关系数据库映射.面向对象的数据库操作,底层仍是sql语句. 获得 hibernate的maven依赖. <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactI

JAVA操作mysql(如何更加面向对象的操作数据库)

既然谈到面向对象,所以,先把连接信息给搞个对象出来: public class DBInfo { private String driver; private String host; private String port; private String user; private String pwd; private String dataBase; public DBInfo(){ this.driver = "com.mysql.jdbc.Driver"; this.host

PHP操作数据库PDO

PHP操作数据库 加载数据库驱动 访问phpinfo.php可以查看是否已经加载数据库驱动,如下显示还没有加载mySql数据库驱动. 在c盘找到php.ini配置文件开启加载mySql驱动,如下图,去掉分号. 连接数据库 <?php //连接数据库 $dsn="mysql:dbname=test;host=127.0.0.1";//数据源名 $user="root";//用户名 $password="715632";//密码 try{ $p

封装的 PDO 操作数据库 的帮助类 MySqlHelper

封装的 PDO 操作数据库 的帮助类 MySqlHelper 封装的 PDO 操作数据库 的帮助类 MySqlHelper ,仅供学习交流使用! <?php /** * Description of MySqlHelper * * @author fx678 */ class MySqlHelper { private static $pdoDB = null; public function __destruct() { $this->pdoDB = null; } /** * 获取ini配

Mysqli 操作数据库

每次用到mysql_connect连接数据库的时候都会提示: 1 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in E:\wamp\www\myquote\includes\mysql_connect.php on line 5 作为一个高要求高完美的男人,实在受不了这提示.躲着他也不行——解决

Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

 PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根据需求调取对象方法.Memcached 是较 Memcache 更加 强大的类库,功能更多,这里只介绍Memcache. 部分方法介绍: 1.Memcache::add - 增加一个条目到缓存服务器 2.Memcache::addServer - 向连接池中添加一个memcache服务器 3.Mem