牛骨文教育服务平台(让学习变的简单)
博文笔记

PDO增删查改操作类【基础操作一】

创建时间:2014-07-01 投稿人: 浏览次数:4651

毕竟入门不久,之前写PHP+MySQL操作都是直接用原生PHP连接数据库进行操作,后来才知道还有PDO这种东西。

PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

下面是刚开始学PDO写的一个类,目前还不了解PDO跟原生比,有什么明显的优点,先把基本操作搞清楚,然后慢慢来。增删查改已满足:

/**
* @abstract PDO study: PDO操作MySQL增删查改类
* @date  2014/06/30
* @author Silov[bluebird237@gmail.com]
*/

class mysqlPdoClass{
	private $db;
	private $db_name = "study";
	private $db_serv;
	private $db_user = "root";
	private $db_pass = "root";
	private $db_host = "localhost";
	//构造函数以及连接数据库
	public function __construct( $username = "root" , $password = "root" , $connect = "false"){
		$this->db_serv = "mysql:dbname=".$this->db_name.";host=".$this->db_host.";charset=utf-8";
		$this->db_user = $username;
		$this->db_pass = $password;
	}
	//管理数据库,析构函数
	public function __destruct(){
		$this->db = null;
	}
	//执行SQL语句,返回值为sql执行结果
	public function run_query($sql){
		$this->db = new PDO($this->db_serv, $this->db_user, $this->db_pass);
		$this->db->query("set names utf8");	//设置PHP+MySQL连接的编码格式为UTF8
		$row = $this->db->query($sql);
		$row->setFetchMode(PDO::FETCH_ASSOC);	//设置查询结果显示为键值对数组模式
		return $row;
	}
	//执行SQL语句,返回值为sql影响行数
	public function run_exec($sql){
		$this->db = new PDO($this->db_serv, $this->db_user, $this->db_pass);
		$this->db->query("set names utf8");    //设置PHP+MySQL连接的编码格式为UTF8
		return $this->db->exec($sql);
	}
	/**
	* @abstract 插入操作
	* @param 	$table:表名; $data:插入数据键值对数组; $return:是否返回值,为true时,返回插入字段的id; $debug:是否测试,true时返回sql语句,不执行
	* @return 	返回值:插入结果,boolean
	*/
	public function data_insert($table, $data, $return = true,$debug=false){
		if(!$table) {
			return false;
		}
		$fields = array();
		$values = array();
		foreach ($data as $field => $value){
			$fields[] = "`".$field."`";
			$values[] = """.addslashes($value).""";
		}
		if(empty($fields) || empty($values)) {
			return false;
		}
		$sql = "INSERT INTO `".$table."` 
				(".join(",",$fields).") 
				VALUES (".join(",",$values).")";
		if($debug){
			return $sql;
		}
		$query = $this->run_exec($sql);
		return $return ? $this->db->lastInsertId() : $query;
	}
	/**
	* @abstract 更新操作
	* @param 	$table:表名; $condition:更新查询条件; $data:更新数据键值对数组; $limit:更新数据条数上限
	*			$debug:测试时给true,则不执行update,直接返回完整的sql语句
	* @return 	返回值:插入结果,boolean
	*/
	public function data_update($table, $condition, $data, $limit = 1,$debug=false) {
		if(!$table) {
			return false;
		}
		$set = array();

		foreach ($data as $field => $value) {
			$set[] = "`".$field."`=".""".addslashes($value).""";
		}
		if(empty($set)) {
			return false;
		}
		$sql = "UPDATE `".$table."` 
				SET ".join(",",$set)." 
				WHERE ".$condition." ".
				($limit ? "LIMIT ".$limit : "");
		if($debug){
			return $sql;
		}
		return $this->run_exec($sql);
	}
	/**
	* @abstract 查询单个字段值
	* @param 	$sql:sql语句
	* @return 	返回值:string
	*/
	public function getOne($sql){
		$row = $this->run_query($sql);
		$data = $row->fetch();
		$data = array_shift($data);
		return $data;
	}
	/**
	* @abstract 查询单条记录,多个字段
	* @param 	$sql:sql语句
	* @return 	返回值:键值对数组
	*/
	public function getRow($sql){
		$row = $this->run_query($sql);
		$data = $row->fetch();
		return $data;
	}
	/**
	* @abstract 查询多条记录
	* @param 	$sql:sql语句
	* @return 	返回值:以键值对数组为元素的数组
	*/
	public function getRows($sql){
		$row = $this->run_query($sql);
		$data = $row->fetchAll();
		return $data;
	}
}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。