search
Homephp教程php手册封装了一个PDO的类,希望CSDN的大牛们指导一下不足之处

封装了一个PDO的类,希望CSDN的大牛们指点一下不足之处 封装了一个PDO的类,希望CSDN的大牛们指点一下不足之处。 大师们,comeon! ?php /** *PDO封装类,目的是为了使用起来更简单方便 *modifyDate:2014-07-01 */ classPDOX{ private$pdo=null; public$statem

封装了一个PDO的类,希望CSDN的大牛们指点一下不足之处
封装了一个PDO的类,希望CSDN的大牛们指点一下不足之处。

大师们,come on !

<?php<br />
/**<br />
 * PDO封装类,目的是为了使用起来更简单方便<br />
 * modify Date: 2014-07-01<br />
 */<br />
class PDOX {<br />
	private $pdo 	   = null;<br />
	<br />
	public  $statement = null;<br />
	<br />
	public  $options = array(<br />
		PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ",<br />
	);<br />
	<br />
	public function __construct($dsn, $user = '', $pass = '', $persistent = false, $charset = "utf8"){<br />
		$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= $charset;<br />
		if($persistent){<br />
			$this->options[PDO::ATTR_PERSISTENT] = true;<br />
		}<br />
		$this->pdo = new PDO($dsn, $user, $pass, $this->options);<br />
	}<br />
	/**<br />
	全局属性设置,包括:列名格式和错误提示类型    可以使用数字也能直接使用参数<br />
	*/<br />
	public function setAttr($param, $val = ''){<br />
		if(is_array($param)){<br />
			foreach($param as $key => $val){<br />
				$this->pdo->setAttribute($key, $val);<br />
			}<br />
		}else{<br />
			if($val != '' ){<br />
				$this->pdo->setAttribute($param, $val);<br />
			}else{<br />
				return false;<br />
			}<br />
		}<br />
	}<br />
	/**<br />
	生成一个编译好的sql语句模版 你可以使用 ? :name 的形式<br />
	返回一个statement对象<br />
	*/<br />
	public function prepare($sql){<br />
		if(empty($sql)){<br />
			return false;<br />
		}<br />
		$this->statement = $this->pdo->prepare($sql);<br />
		return $this->statement;<br />
	}<br />
	/**<br />
	执行Sql语句,一般用于 增、删、更新或者设置  返回影响的行数<br />
	*/<br />
	public function exec($sql){<br />
		if(empty($sql)){<br />
			return false;<br />
		}<br />
		try{<br />
			return $this->pdo->exec($sql);<br />
		}catch(Exception $e){<br />
			return $e->getMessage();<br />
		}<br />
	}<br />
	/**<br />
	执行有返回值的查询,返回PDOStatement  可以通过链式操作,可以通过这个类封装的操作获取数据<br />
	*/<br />
	public function query($sql){<br />
		if(empty($sql)){<br />
			return false;<br />
		}<br />
		$this->statement = $this->pdo->query($sql);<br />
		return $this->statement;<br />
	}<br />
	/**<br />
	开启事务<br />
	*/<br />
	public function beginTransaction(){<br />
		return $this->pdo->beginTransaction();<br />
	}<br />
	/**<br />
	提交事务<br />
	*/<br />
	public function commit(){<br />
		return $this->pdo->commit();<br />
	}<br />
	/**<br />
	事务回滚<br />
	*/<br />
	public function rollBack(){<br />
		return $this->pdo->rollBack();<br />
	}<br />
	<br />
	public function lastInertId(){<br />
		return $this->pdo->lastInsertId();<br />
	}<br />
	<br />
	<br />
	//**   PDOStatement 类操作封装    **//<br />
	<br />
	/**<br />
	让模版执行SQL语句,1、执行编译好的 2、在执行时编译<br />
	*/<br />
	public function execute($param = ""){<br />
		if(is_array($param)){<br />
			try{<br />
				return $this->statement->execute($param);<br />
			}catch (Exception $e){<br />
				//return $this->errorInfo();<br />
				return $e->getMessage();<br />
			}<br />
		}else{<br />
			try{<br />
				return $this->statement->execute();<br />
			}catch(Exception $e){<br />
				/* 返回的错误信息格式<br />
				[0] => 42S22<br />
    			[1] => 1054<br />
    			[2] => Unknown column 'col' in 'field list'<br />
    			return $this->errorInfo();<br />
    			*/<br />
				return $e->getMessage();<br />
			}<br />
		}<br />
	}<br />
	<br />
	/**<br />
	参数1说明:<br />
	PDO::FETCH_BOTH		也是默认的,两者都有(索引,关联)<br />
	PDO::FETCH_ASSOC	关联数组<br />
	PDO::FETCH_NUM		索引<br />
	PDO::FETCH_OBJ			对象<br />
	PDO::FETCH_LAZY		对象 会附带queryString查询SQL语句<br />
	PDO::FETCH_BOUND	如果设置了bindColumn,则使用该参数<br />
	*/<br />
	public function fetch($fetch_type = PDO::FETCH_ASSOC){<br />
		if(is_object($this->statement)){<br />
			return $this->statement->fetch($fetch_type);<br />
		}<br />
		return false;<br />
	}<br />
	/**<br />
	参数1说明:<br />
	PDO::FETCH_BOTH		也是默认的,两者都有(索引,关联)<br />
	PDO::FETCH_ASSOC	关联数组<br />
	PDO::FETCH_NUM		索引<br />
	PDO::FETCH_OBJ		对象<br />
	PDO::FETCH_COLUMN	指定列 参数2可以指定要获取的列<br />
	PDO::FETCH_CLASS	指定自己定义的类<br />
	PDO::FETCH_FUNC		自定义类 处理返回的数据<br />
	PDO_FETCH_BOUND	如果你需要设置bindColumn,则使用该参数<br />
	参数2说明:<br />
	给定要处理这个结果的类或函数<br />
	*/<br />
	public function fetchAll($fetch_type = PDO::FETCH_ASSOC, $handle = ''){<br />
		if(empty($handle)){<br />
			return $this->statement->fetchAll($fetch_type);<br />
		}<br />
		return $this->statement->fetchAll($fetch_type, $handle);<br />
	}<br />
	/**<br />
	以对象形式返回 结果 跟fetch(PDO::FETCH_OBJ)一样<br />
	*/<br />
	public function fetchObject($class_name){<br />
		if(empty($clss_name)){<br />
			return $this->statement->fetchObject();<br />
		}<br />
		return $this->statement->fetchObject($class_name);<br />
	}<br />
	<br />
	public function fetchColumn($intColumn = 0){<br />
		return $this->statement->fetchColumn($intColumn);<br />
	}<br />
	<br />
	/**<br />
	public function bindColumn($array=array(),$type=EXTR_OVERWRITE){<br />
		if(count($array)>0){<br />
			extract($array,$type);<br />
		}<br />
		//$this->statement->bindColumn()<br />
	}<br />
	*/<br />
	<br />
	/**<br />
	以引用的方式绑定变量到占位符(可以只执行一次prepare,执行多次bindParam达到重复使用的效果)<br />
	*/<br />
	public function bindParam($parameter, $variable, $data_type = 'STR', $length = 0){<br />
		switch ($data_type){<br />
			case  'STR':<br />
				$data_type = PDO::PARAM_STR;<br />
				break;<br />
			case 'INT':<br />
				$data_type = PDO::PARAM_INT;<br />
				break;<br />
			default :<br />
				$data_type = '';<br />
		【本文来自鸿网互联 (http://www.68idc.cn)】		break;<br />
		}<br />
		return $this->statement->bindParam($parameter, $variable, $data_type, $length);<br />
	}<br />
	<br />
	/**<br />
	返回statement记录集的行数<br />
	*/<br />
	public function rowCount(){<br />
		return $this->statement->rowCount();<br />
	}<br />
	public function count(){<br />
		return $this->statement->rowCount();<br />
	}<br />
	public function columnCount(){<br />
		$this->statement->execute();<br />
		return $this->statement->columnCount();<br />
	}<br />
	public function getColumnMeta($intColumn){<br />
		return $this->statement->getColumnMeta($intColumn);<br />
	}<br />
	<br />
	<br />
	/**<br />
	关闭<br />
	*/<br />
	public function close(){<br />
		return $this->statement->closeCursor();<br />
	}<br />
	<br />
	public function closeCursor(){<br />
		return $this->statement->closeCursor();<br />
	}<br />
	/**<br />
	返回错误信息也包括错误号<br />
	*/<br />
	private function errorInfo(){<br />
		return $this->statement->errorInfo();<br />
	}<br />
	/**<br />
	返回错误号<br />
	*/<br />
	private function errorCode(){<br />
		return $this->statement->errorCode();<br />
	}<br />
	<br />
	<br />
	<br />
	//简化操作<br />
	public function insert($table, $data){<br />
		if(!is_array($data)){<br />
			return false;<br />
		}<br />
		$cols = array();<br />
		$vals = array();<br />
		foreach($data as $key => $val){<br />
			$cols[] = $key;<br />
			$vals[] = "'" . $val . "'";<br />
		}<br />
		$sql  = "INSERT INTO {$table} (";<br />
		$sql .= implode(",", $cols) . ") VALUES (";		<br />
		$sql .= implode(",", $vals) . ")";<br />
		return $this->exec($sql);<br />
	}<br />
	public function insertBind($table, $arrayData){<br />
		if(!is_array($arrayData)){<br />
			return false;<br />
		}<br />
		$vals = array_keys($arrayData);<br />
		$cols = array();<br />
		/*<br />
		$arrayobject  = new  ArrayObject( $arrayData );<br />
		$iterator  	  =  $arrayobject->getIterator();<br />
		while($iterator->valid()) {<br />
			$vals[] =  ':' . $iterator->key() . '';<br />
			$iterator->next();<br />
		}<br />
		*/<br />
		$c	  = implode('', $vals);<br />
		$cols = array_filter(explode(':', $c));<br />
<br />
		$sql  = "INSERT INTO {$table} (";<br />
		$sql .= implode(",", $cols) . ") VALUES (";		<br />
		$sql .= implode(",", $vals) . ")";<br />
		<br />
		$this->statement = $this->pdo->prepare($sql);<br />
		$this->statement->execute($arrayData);<br />
		return  $this->statement->rowCount();<br />
	}<br />
	<br />
	public function update($table, $data, $where){<br />
		if(!is_array($data)){<br />
			return false;<br />
		}<br />
		$set = array();<br />
		foreach($data as $key => $val){<br />
			$set[] = $key . "='" . $val  . "'";<br />
		}<br />
		$sql = "UPDATE {$table} SET ";<br />
		$sql .= implode(",", $set);<br />
		$sql .= " WHERE " . $where;<br />
		return $this->exec($sql);<br />
	}<br />
	public function updateBind($sql, $arrayWhere){<br />
		if(empty($sql) || !is_array($arrayWhere)){<br />
			return false;<br />
		}<br />
		$this->statement = $this->pdo->prepare($sql);<br />
		$this->statement->execute($arrayWhere);<br />
		return $this->statement->rowCount();<br />
	}<br />
<br />
	<br />
	public function delete($table, $where){<br />
		if(empty($table) || empty($where)){<br />
			return false;<br />
		} <br />
		$sql = "DELETE FROM {$table} WHERE " . $where;<br />
		return $this->exec($sql);<br />
	}<br />
	public function deleteBind($sql, $arrayWhere){<br />
		if(empty($sql) || !is_array($arrayWhere)){<br />
			return false;<br />
		}<br />
		$this->statement = $this->pdo->prepare($sql);<br />
		$this->statement->execute($arrayWhere);<br />
		return $this->statement->rowCount();<br />
	}<br />
}<br />
?>




毕竟在一个项目当中,不可能到处的写PDO自身的一些东西。也不要说PDO已经封装好了,无须再次封装之类的废话。
------解决思路----------------------
几点建议:
1、如果我
$db = new PDOX;
$a = $db->query($sql1);
$b = $db->query($sql2);
print_r($a->fetchall());
print_r($b->fetchall());
可以吗?显然是不可以的,因为
$this->statement = $this->pdo->query($sql);
前一次的查询结果被后一次的覆盖了
2、事务(Transaction)操作宜封装成整体,只传入一组 sql 而隐藏相关操作
3、没考虑使用存储过程
4、PDOX 可直接继承于 PDO 而无需抄写 PDO 已有方法


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Fatal error: Call to undefined method PDO::prepare() in的解决方法PHP Fatal error: Call to undefined method PDO::prepare() in的解决方法Jun 22, 2023 pm 06:40 PM

PHP作为一种流行的Web开发语言,已经被使用了很长时间。PHP中集成的PDO(PHP数据对象)类是我们在开发Web应用程序过程中与数据库进行交互的一种常用方法。但是,一些PHP开发者经常遇到的问题是,当使用PDO类与数据库进行交互时,他们会收到这样的错误:PHPFatalerror:CalltoundefinedmethodPDO::prep

php如何使用PHP的PDO_PGSQL扩展?php如何使用PHP的PDO_PGSQL扩展?Jun 02, 2023 pm 06:10 PM

PHP作为一种流行的编程语言,在Web开发领域中有着广泛的应用。其中,PHP的PDO_PGSQL扩展是一种常用的PHP扩展,它提供了与PostgreSQL数据库的交互接口,可以实现PHP与PostgreSQL之间的数据传输和交互。本文将详细介绍如何使用PHP的PDO_PGSQL扩展。一、什么是PDO_PGSQL扩展?PDO_PGSQL是PHP的一个扩展库,它

PHP和PDO: 如何执行批量插入和更新PHP和PDO: 如何执行批量插入和更新Jul 28, 2023 pm 07:41 PM

PHP和PDO:如何执行批量插入和更新导言:在使用PHP编写数据库相关的应用程序时,经常会遇到需要批量插入和更新数据的情况。传统的做法是使用循环来执行多次数据库操作,但这样的方法效率较低。PHP的PDO(PHPDataObject)提供了一种更高效的方法来执行批量插入和更新操作,本文将介绍如何使用PDO来实现批量插入和更新。一、PDO简介:PDO是PH

PHP和PDO: 如何处理数据库中的JSON数据PHP和PDO: 如何处理数据库中的JSON数据Jul 29, 2023 pm 05:17 PM

PHP和PDO:如何处理数据库中的JSON数据在现代web开发中,处理和存储大量数据是一个非常重要的任务。随着移动应用和云计算的普及,越来越多的数据以JSON(JavaScriptObjectNotation)格式存储在数据库中。PHP作为一种常用的服务器端语言,它的PDO(PHPDataObject)扩展提供了一种方便的方式来处理和操作数据库。本

PHP和PDO: 如何进行分页查询和显示数据PHP和PDO: 如何进行分页查询和显示数据Jul 29, 2023 pm 04:10 PM

PHP和PDO:如何进行分页查询和显示数据在开发Web应用程序时,分页查询和显示数据是一个非常常见的需求。通过分页,我们可以一次显示一定数量的数据,提高页面加载速度和用户体验。在PHP中,使用PHP数据对象(PDO)库可以轻松实现分页查询和显示数据的功能。本文将介绍如何在PHP中使用PDO进行分页查询和显示数据,并提供相应的代码示例。一、创建数据库和数据表

PHP和PDO: 如何执行数据库备份和还原操作PHP和PDO: 如何执行数据库备份和还原操作Jul 29, 2023 pm 06:54 PM

PHP和PDO:如何执行数据库备份和还原操作在开发Web应用程序时,数据库的备份和还原是非常重要的任务。PHP作为一门流行的服务器端脚本语言,提供了丰富的库和扩展,其中PDO(PHP数据对象)是一款强大的数据库访问抽象层。本文将介绍如何使用PHP和PDO来执行数据库备份和还原操作。第一步:连接数据库在实际操作之前,我们需要建立与数据库的连接。使用PDO对

如何使用PDO连接到Redis数据库如何使用PDO连接到Redis数据库Jul 28, 2023 pm 04:29 PM

如何使用PDO连接到Redis数据库Redis是一个开源的高性能、内存存储的键值数据库,常用于缓存、队列等场景。在PHP开发中,使用Redis可以有效提升应用的性能和稳定性。而通过PDO(PHPDataObjects)扩展,我们可以更方便地连接和操作Redis数据库。本文将介绍如何使用PDO连接到Redis数据库,并附带代码示例。安装Redis扩展在开始

如何使用PDO绑定和获取绑定参数值如何使用PDO绑定和获取绑定参数值Jul 28, 2023 pm 07:09 PM

如何使用PDO绑定和获取绑定参数值在开发Web应用程序时,处理数据库查询是很常见的任务之一。为了保证应用程序的安全性和可靠性,我们应该使用参数绑定来处理SQL查询,而不是直接将变量值插入SQL语句中。PDO(PHP数据对象)提供了一种方便且安全的方式来绑定参数和获取绑定参数的值。下面,我们将介绍如何使用PDO进行参数绑定和获取绑定参数的

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)