pdo_helper數(shù)據(jù)庫PDO操作類(未精簡)第一部分
king老師,還有各位大大們,幫忙看下,我自己寫的這個pdo操作類,不足的地方請指出。謝謝了!
<?php /**************** *????pdo_dbhelper.class.php *????pdo數(shù)據(jù)庫操作幫助類 * ******************/ class?Pdo_dbhelper{ ????private?$conn;//PDO對象 ????private?$stmt;//PDOStatement對象 ????public?function?__construct(){ ????????$this->getConnection(); ????} ????public?function?getConnection(){ ????????$database="anime"; ????????$host="127.0.0.1"; ????????$dns="mysql:dbname=".$database.";host=".$host; ????????$user="root"; ????????$pwd="mysql"; ????????$charset="utf8"; ????????try{ ????????????$pdo=new?PDO($dns,$user,$pwd); ????????????$pdo->exec("set?names?".$charset); ????????????$this->conn=$pdo; ????????}catch(PDOException?$e){ ????????????echo?$e->getMessage(); ????????} ????} ????public?function?preparedStatement($str_sql,$params){ ????????try{ ????????????$this->stmt=$this->conn->prepare($str_sql); ????????????$this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//設(shè)置報錯模式 ????????????if(!empty($params)){ ????????????????foreach($params?as?$key=>$value){ ????????????????????$this->stmt->bindParam($key+1,$value); ????????????????} ????????????} ????????????$result=$this->stmt->execute(); ????????????return?$result; ????????}catch(PDOException?$e){ ????????????$e->getMessage(); ????????} ????} ???? ????/* ????*????@function?添加數(shù)據(jù) ????*????@param?string?$table?表名,?array?$params?列名和值組成的數(shù)組 ????*????@return?boolean?返回true表示添加數(shù)據(jù)成功,返回false表示添加失敗 ????*/ ????public?function?create($table,$params){ ????????$str_sql="INSERT?INTO?`".$table."`?("; ????????$columnsArr=array(); ????????$placeholder=array(); ????????$valuesArr=array(); ????????foreach($params?as?$key=>$value){ ????????????$columnsArr[]="`".$key."`"; ????????????$placeholder[]="?"; ????????????if(is_numeric($value)){ ????????????????$valuesArr[]=$value; ????????????} ????????????else{ ????????????????$valuesArr[]="\'".$value."\'"; ????????????} ????????} ????????$str_columns=implode(",",$columnsArr); ????????$str_values=implode(",",$placeholder); ????????$str_sql.=$str_columns.")?VALUES(".$str_values.")"; ????????return?$this->preparedStatement($str_sql,$valuesArr); ????} ???? ????/* ????*????@function?修改數(shù)據(jù) ????*????@param?string?$table?表名,?array?$params?列名和值組成的數(shù)組,?array?$condition?部位=>array("id","=","5")組成的條件數(shù)組 ????*????@return?boolean?返回true表示修改數(shù)據(jù)成功,返回false表示修改失敗 ????*/ ????public?function?update($table,$params,$condition){ ????????$str_sql="UPDATE?".$table."?SET?"; ????????$columnsArr=array(); ????????$valuesArr=array(); ????????foreach($params?as?$key=>$value){ ????????????$columnsArr[]="`".$key."`=?"; ????????????if(is_numeric($value)){???? ????????????????$valuesArr[]=$value; ????????????} ????????????else{ ????????????????$valuesArr[]="\'".$value."\'"; ????????????} ????????} ????????$str_columns=implode(",",$columnsArr); ????????$condition_arr=$this->analyzeCondition($condition);//分析條件,返回數(shù)組 ????????$str_sql.=$str_columns.$condition_arr["str_condition"]; ????????if(!empty($condition_arr["value_arr_condition"])){ ????????????$valuesArr=array_merge($valuesArr,$condition_arr["value_arr_condition"]); ????????} ????????return?$this->preparedStatement($str_sql,$valuesArr); ????} ????/* ????*????@function?刪除數(shù)據(jù)(一般不做物理刪除) ????*????@param?string?$table?表名,?array?$condition?部位=>array("id","=","5")組成的條件數(shù)組 ????*????@return?boolean?返回true表示刪除數(shù)據(jù)成功,返回false表示刪除失敗 ????*/ ????public?function?delete($table,$condition){ ????????$str_sql="DELETE?FROM?`".$table."`?"; ????????$valuesArr=array(); ????????$condition_arr=$this->analyzeCondition($condition); ????????$str_sql.=$condition_arr["str_condition"]; ????????//肯定有where條件不然就刪表了,所以編碼的時候就避免 ????????if(empty($condition_arr["value_arr_condition"])){ ????????????return?false; ????????} ????????else{ ????????????$valuesArr=$condition_arr["value_arr_condition"]; ????????} ????????return?$this->preparedStatement($str_sql,$valuesArr); ????} ???? ????/* ????*????@function?讀取數(shù)據(jù) ????*????@param?string?$table?表名,?array?$params?由列名組成的一維數(shù)組?array?$condition?部位=>array(array("id","=","5"),)組成的條件數(shù)組 ????*????@return?array? ????*/ ????public?function?readAll($table,$params,$condition){ ????????$str_sql="SELECT?"; ????????$columnsArr=array(); ????????$valuesArr=array(); ????????foreach($params?as?$key=>$value){ ????????????$columnsArr[]="`".$value."`"; ????????} ????????$str_columns=implode(",",$columnsArr); ????????$condition_arr=$this->analyzeCondition($condition); ????????$str_sql.=$str_columns."?FROM?`".$table."`".$condition_arr["str_condition"]; ????????echo?$str_sql; ????????if(!empty($condition_arr["value_arr_condition"])){ ????????????$valuesArr=$condition_arr["value_arr_condition"];//有條件的情況下, ????????} ????????$this->preparedStatement($str_sql,$valuesArr); ????????return?$this->stmt->fetchAll(PDO::FETCH_COLUMN,0); ????} ????/* ????*????@function?返回受影響的行數(shù) ????*????@return?string? ????*/ ????public?function?getfetchRowNum(){ ????????if($this->stmt==null){ ????????????return?false; ????????} ????????else{ ????????????return?$this->stmt->rowCount(); ????????} ????} ???? ????/* ????*????@function?返回最后插入行的ID ????*????@return?string? ????*/ ????public?function?getLastInsertId(){ ????????if($this->conn==null){ ????????????return?false; ????????} ????????else{ ????????????return?$this->conn->lastInsertId(); ????????} ????} ????/* ????*????@function?分析condition數(shù)組 ????*????@param?$condition?條件數(shù)組 ????*????@return?array?["str_condition"]條件的字符串部分,["value_arr_condition"]條件的值組成的數(shù)組 ????*/ ????public?function?analyzeCondition($condition){ ????????$arr=array(); ????????$arr["str_condition"]=""; ????????$arr["value_arr_condition"]=array(); ????????if(isset($condition["where"])){ ????????????$where_arr=$this->analyzeWhere($condition["where"]); ????????????$arr["str_condition"].=$where_arr["str"]; ????????????$arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$where_arr["value_arr"]); ????????} ????????if(isset($condition["group"])){ ????????????$group_arr=$this->analyzeGroup($condition["group"]); ????????????$arr["str_condition"].=$group_arr["str"]; ????????????$arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$group_arr["value_arr"]); ????????} ????????if(isset($condition["having"])){ ????????????$having_arr=$this->analyzeHaving($condition["having"]); ????????????$arr["str_condition"].=$having_arr["str"]; ????????????$arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$having_arr["value_arr"]); ????????} ????????if(isset($condition["order"])){ ????????????$order_arr=$this->analyzeOrder($condition["order"]); ????????????$arr["str_condition"].=$order_arr["str"]; ????????????$arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$order_arr["value_arr"]); ????????} ????????if(isset($condition["limit"])){ ????????????$limit_arr=$this->analyzeLimit($condition["limit"]); ????????????$arr["str_condition"].=$limit_arr["str"]; ????????????$arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$limit_arr["value_arr"]); ????????} ????????return?$arr; ????} ???? //接后續(xù)第二部分,太長了。