简介:这是[share]PDO操作MySql类的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=346699' scrolling='no'>转载自 分享
最终编辑 liujijunbd
为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类:
由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置:
<?php /** * 类标准说明 PDO连接数据库的配置类 * 类名: ConfigDataBase * 功能说明: 为了让代码重用,利用此类可以动态的连接各种数据库 * 参数说明: $_dbms = "mysql"; //数据库类型 * $_host = '127.0.0.1'; //数据库ip地址 * $_port = '3306'; //数据库端口 * $_username = 'root'; //数据库用户名 * $_password = 'liujijun'; //密码 * $_dbname = 'zendf'; //数据库名 默认为zenf * $_charset = 'utf-8'; //数据库字符编码 * $_dsn;// //data soruce name 数据源 * * * 类属性说明: * 类方法说明: * 返回值: 不同函数返回不同的值 * 备注说明: * 作者: 刘纪君 * 最后一次修改时间: 2011下午02:01:39 * */ class ConfigDataBase { protected static $_dbms = "mysql"; //数据库类型 protected static $_host = '127.0.0.1'; //数据库ip地址 protected static $_port = '3306'; //数据库端口 protected static $_username = 'root'; //数据库用户名 protected static $_password = 'liujijun'; //密码 protected static $_dbname = 'zendf'; //数据库名 默认为zenf protected static $_charset = 'utf-8'; //数据库字符编码 protected static $_dsn;// //data soruce name 数据源 /** *@return 返回数据源名 */ public static function getDsn() { //将变量的值组合成 mysql:host=localhost;port =3306;dbname=test',$login,$passwd的形式 if (!isset(self::$_dsn)){ self::$_dsn = self::$_dbms.':host = '.self::$_host.';prot = '. self::$_port . ';dbname = ' . self::$_dbname.','. self::$_username . ','.self::$_password; if (strlen(self::$_charset) > 0){ self::$_dsn = self::$_dsn . ';charset = ' . self::$_charset; } } return self::$_dsn;//返回数据源名 } /** * 功能:设置$dbms * @param $dbms */ public static function setDbms($dbms){ if (isset($dbms) &&(strlen($dbms) > 0 )){ self::$_dbms = trim($dbms); } } /** * * @param $host //数据库地址 */ public static function setHost($host){ if (isset($host) &&(strlen($host) > 0 )){ self::$_host = trim($host); } } /** * * @param $host 端口号 */ public static function setPort($port){ if (isset($port) &&(strlen($port) > 0 )){ self::$_post = trim($port); } } /** * * @param $passwd 密码 */ public static function setPasswd($passwd){ if (isset($passwd) &&(strlen($passwd) > 0 )){ self::$_password = trim($passwd); } } /** * * @param $username 用户名 */ public static function setUsernName($username){ if (isset($username) &&(strlen($username) > 0 )){ self::$_username = trim($username); } } /** * * @param $dbname 数据库名 */ public static function setDbName($dbname){ if (isset($dbname) &&(strlen($dbname) > 0 )){ self::$_dbname = trim($dbname); } } /** * * @param $charset 数据库编码 */ public static function setCharset($charset){ if (isset($charset) &&(strlen($charset) > 0 )){ self::$_charset = trim($charset); } } } 下面是对数据库的操作: <?php require_once 'ConfigDataBase.php'; header("Content-Type: text/html; charset=utf-8");//设置编码 /** * 类标准说明 * 类名: PdoMysql * 功能说明: 对数据库进行各种操作 * 参数说明: * 类属性说明: * 类方法说明: * 返回值: * 备注说明: * 作者: 刘纪君 * 最后一次修改时间: 2011上午10:45:36 * */ class PdoMysqlOperater{ /** * @return 返回连接数据库的句柄 */ public function getConnection(){ $connection = NULL; try { $connection = new PDO(ConfigDataBase::getDsn()); echo 'Success'; } catch (PDOException $e) { print "Error in connection :".$e->getMessage().' '.die(); } return $connection; } /** * * @param $connection 连接数据库的句柄 */ public function closeConnection($connection){ try { if ($connection != null) { $connection = null;//关闭数据库连接句柄 } } catch (Exception $e) { print 'Close the connectin is error:'.$e->getMessage(); } } /** * 功能: 向数据库中增加数据 * @param $sql sql语句 */ public function insertDatabase($sql){ $affect = false;//失败返回false try { $conn = $this->getConnection(); $conn->exec($sql); $affect = true;//插入成功返回true $this->closeConnection($conn);//关闭数据库 } catch (PDOException $e) { print 'Insert error '.$e->getMessage(); } return $affect;//返回值 } /** * * @param $id 表的主键id * @param $tableName 表名 */ public function deleltById($id,$tableName){ $affact = false; $sql = 'delete from '.trim($tableName).' where id = '.$id; try { $conn = $this->getConnection(); $conn->exec($sql); $this->closeConnection($conn); $affact = true; } catch (PDOException $e) { print 'Delelte error is '.$e->getMessage(); } return $affact; } /** * 功能: 以and 的形式删除记录 * @param $tableName 表的名称 * @param $array 数组表中字段名=其值的方式进行组合 */ public function prepareDeleteAnd($tableName,array $array=null){ $sql = 'delete from '. $tableName . ' where '; $count = count($array);//计算数组的长度 $flag = 0;//设置标记 foreach ($array as $key => $value){ $flag++;//让flag增加一 $sql .= $key .'='."'".$value."'"; if ($flag != $count ){//当falg不等于count时,数组还有值,后面增加and,反之不增加 $sql .= ' and '; } } echo $sql;//测试sql语句的组合 try { $conn = $this->getConnection();//获取连接 $conn->prepare($sql); $this->closeConnection(); } catch (PDOException $e) { print 'Delete error is '.$e->getMessage(); } } /** * 功能: 以or 的形式删除记录 * @param $tableName 表的名称 * @param $array 数组表中字段名=其值的方式进行组合 */ public function prepareDeleteOr($tableName,array $array=null){ $sql = 'delete from '. $tableName . ' where '; $count = count($array);//计算数组的长度 $flag = 0;//设置标记 foreach ($array as $key => $value){ $flag++;//让flag增加一 $sql .= $key .'='."'".$value."'"; if ($flag != $count ){//当falg不等于count时,数组还有值,后面增加and,反之不增加 $sql .= ' or '; } } echo $sql;//测试sql语句的组合 try { $conn = $this->getConnection();//获取连接 $stmt = $conn->prepare($sql); $stmt->execute();//执行 $this->closeConnection(); } catch (PDOException $e) { print 'Delete error is '.$e->getMessage(); } } /** * 功能: 取得表中所有数据 * @param $sql sql语句 */ public function getAll($sql){ $result = null; try { $conn = $this->getConnection(); $result = $conn->query($sql); $this->closeConnection($conn); } catch (PDOException $e) { print 'GetAll error is '.$e->getMessage(); } } /** * 功能:更新数据表中的信息 * @param $table 要更新的表名 * @param array $updateFiled 要更新的字段 * @param array $updateConditon 更新需要的条件 */ public function updateDataBase($table,array $updateFiled,array $updateConditon ){ $sql = 'update from ' .$table .' set '; //对set字段进行赋值操作 $count = count($updateFiled);//获取要修改数组的长度 $flag = 0;//设置标记为0 foreach ($updateFiled as $key => $value){ $flag++; $sql .= $key .'='."'".$value."'"; if ($flag != $count){ $sql .=','; } } //对where条件进行赋值 $countUpdateCondition = count($updateConditon);//获取要修改数组的长度 $flag = 0;//设置标记为0 $sql .= ' where '; foreach ($updateConditon as $key => $value){ $flag++; $sql .= $key .'='."'".$value."'"; if ($flag != $countUpdateCondition){ $sql .=' and '; } } try { $conn = $this->getConnection(); $conn->exec($sql); $this->closeConnection($conn); } catch (PDOException $e) { print 'Update error is :'.$e->getMessage(); } } /** * 功能: 根据表和提高的查询条件进行查询 * 返回值: 返回结果集 * @param $table 数据表名 * @param array $findCondition 查询条件 */ public function findData($table,array $findCondition){ $sql = 'select from '.$table .' where '; $count = count($findCondition);//获取查询条件数组的长度 $flag = 0;//设置标记为0 foreach ($findCondition as $key => $value){ $flag++; $sql .= $key .'='."'".$value."'"; if ($flag != $count){ $sql .=' and '; } } try { $conn = $this->getConnection(); $conn->exec($sql); $this->closeConnection($conn); } catch (PDOException $e) { print 'find error is :'.$e->getMessage(); } } } //测试 $db = new PdoMysqlOperater(); $db->findData('liujijun',array('name'=>'liujijun','name1'=>'liujijun'));