PDO操作MySql类分享
为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类,由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置,PDO操作MYSQL类代码如下:
- <?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);
- }//开源代码phpfensi.com
- }
- /**
- *
- * @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'));
- ?>