编写php的工具类,开发自己的框架——(二)数据库工具类的封装

为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用PDO扩展访问数据。数据库接口类I_DAO.interface.php<?php

interface I_DAO

{

//查询所有数据的功能

public function getAll($sql='');

//    //查询一条数据

public function getRow($sql='');

//    //查询一个字段的值

public function getOne($sql='');

//    //执行增删改的功能

public function exec($sql='');

//    (查询的时候,返回的结果数)

public function resultRows();

//    //查询执行插入操作返回的主键的值

public function lastInsertId();

//    //

public function query($sql='');

//    //转义引号、并包裹的

public function escapeData($data='');

}

数据库工具类中,对象只能通过静态方法创建一个实例(单例模式),不能通过克隆和继承创建对象,数据库的连接信息通过数组传递到方法中,工具类中有查询所有数据方法、查询一条数据方法、获得一个字段值的方法、实现增删改方法、返回结果数量的方法等。数据库操作工具类DAOPDO.class.php<?php

class DAOPDO implements I_DAO

{

private $host;

private $dbname;

private $user;

private $pass;

private $port;

private $charset;

//该属性保存pdo对象

private $pdo;

//查询语句返回的结果集数量

private $resultRows;

//私有属性保存该该实例

private static $instance;

//私有的构造方法

private function __construct($option=array())

{

//初始化服务器的配置

$this -> initOptions($option);

//初始化PDO对象

$this -> initPDO();

}

//私有的克隆方法

private function __clone()

{

}

//公共的静态方法实例化单例对象

public static function getSingleton($options=array())

{

if(!self::$instance instanceof self){

//实例化

self::$instance = new self($options);

}

return self::$instance;

}

//初始化服务器的配置

private function initOptions($option)

{

$this -> host = isset($option['host'])?$option['host']:'';

$this -> dbname = isset($option['dbname'])?$option['dbname']:'';

$this -> user = isset($option['user'])?$option['user']:'';

$this -> pass = isset($option['pass'])?$option['pass']:'';

$this -> port = isset($option['port'])?$option['port']:'';

$this -> charset = isset($option['charset'])?$option['charset']:'';

}

//初始化PDO对象

private function initPDO()

{

$dsn =

"mysql:host=$this->host;dbname=$this->dbname;port=$this->port;charset=$this->charset";

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

}

//封装pdostatement对象

public function query($sql="")

{

//返回pdo_statement对象

return $this->pdo -> query($sql);

}

//查询所有数据

public function getAll($sql='')

{

$pdo_statement = $this->query($sql);

$this->resultRows = $pdo_statement -> rowCount();

if($pdo_statement==false){

//输出SQL语句的错误信息

$error_info = $this->pdo-> errorInfo();

$err_str = "SQL语句错误,具体信息如下:
".$error_info[2];

echo $err_str;

return false;

}

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

return $result;

}

//查询一条记录

public function getRow($sql='')

{

$pdo_statement = $this->query($sql);

if($pdo_statement==false){

//输出SQL语句的错误信息

$error_info = $this->pdo-> errorInfo();

$err_str = "SQL语句错误,具体信息如下:
".$error_info[2];

echo $err_str;

return false;

}

$result = $pdo_statement -> fetch(PDO::FETCH_ASSOC);

return $result;

}

//获得一个字段的值

public function getOne($sql='')

{

$pdo_statement = $this->query($sql);

if($pdo_statement==false){

//输出SQL语句的错误信息

$error_info = $this->pdo-> errorInfo();

$err_str = "SQL语句错误,具体信息如下:
".$error_info[2];

echo $err_str;

return false;

}

//返回查询的字段的值,我们在执行sql语句之前就应该明确查询的是哪个字段,这样fetchColumn就已经知道查询的字段值

$result = $pdo_statement -> fetchColumn();

return $result;

}

//实现非查询的方法

public function exec($sql='')

{

$result = $this->pdo -> exec($sql);

//===为了区分 受影响的记录数是0的情况

if($result===false){

$error_info = $this->pdo-> errorInfo();

$err_str = "SQL语句错误,具体信息如下:
".$error_info[2];

echo $err_str;

return false;

}

return $result;

}

//查询语句返回的结果数量

public function resultRows()

{

return $this->resultRows;

}

//返回上次执行插入语句返回的主键值

public function lastInsertId()

{

return $this->pdo->lastInsertId();

}

//数据转义并引号包裹

public function escapeData($data='')

{

return $this->pdo->quote($data);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值