美工统筹SEO,为企业电子商务营销助力!
php中PDO体例实现数据库的增编削查
一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-28 13:45:24 阅读数: 185
须要开启php的pdo撑持,php5.1以上版本撑持
实现数据库毗连单例化,有三因素 静态变量、静态实例化体例、公有机关函数 DPDO.php
class DPDO{ private $DSN; private $DBUser; private $DBPwd; private $longLink; private $pdo; //公有机关函数 避免被间接实例化 private function __construct($dsn, $DBUser, $DBPwd, $longLink = false) { $this->DSN = $dsn; $this->DBUser = $DBUser; $this->DBPwd = $DBPwd; $this->longLink = $longLink; $this->connect(); } //公有 空克隆函数 避免被克隆 private function __clone(){} //静态 实例化函数 前往一个pdo工具 static public function instance($dsn, $DBUser, $DBPwd, $longLink = false){ static $singleton = array();//静态函数 用于存储实例化工具 $singIndex = md5($dsn . $DBUser . $DBPwd . $longLink); if (empty($singleton[$singIndex])) { $singleton[$singIndex] = new self($dsn, $DBUser, $DBPwd, $longLink = false); } return $singleton[$singIndex]->pdo; } private function connect(){ try{ if($this->longLink){ $this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd, array(PDO::ATTR_PERSISTENT => true)); }else{ $this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd); } $this->pdo->query("SET NAMES UTF-8"); } catch(PDOException $e) { die("Error:" . $e->getMessage() . "<br/>"); } }}
用于处置字段映照,利用pdo的字段映照,能够或许有用避免sql注入
//字段接洽关系数组处置, 首要用于写入和更新数据、同and 或 or 的查问前提,发生sql语句和映照字段的数组 public function FDFields($data, $link = ",", $judge = array(), $aliasTable = ""){ $sql = ""; $mapData = array(); foreach($data as $key => $value) { $mapIndex = ":" . ($link != "," ? "c" : "") . $aliasTable . $key; $sql .= " " . ($aliasTable ? $aliasTable . "." : "") . "`" . $key . "` " . ($judge[$key] ? $judge[$key] : "=") . " " . $mapIndex . " " . $link; $mapData[$mapIndex] = $value; } $sql = trim($sql, $link); return array($sql, $mapData); } //用于处置单个字段处置 public function FDField($field, $value, $judge = "=", $preMap = "cn", $aliasTable = "") { $mapIndex = ":" . $preMap . $aliasTable . $field; $sql = " " . ($aliasTable ? $aliasTable . "." : "") . "`" . $field . "`" . $judge . $mapIndex; $mapData[$mapIndex] = $value; return array($sql, $mapData); } //利用刚体例能够或许便利发生查问前提及对应数据数组 public function FDCondition($condition, $mapData) { if(is_string($condition)) { $where = $condition; } else if (is_array($condition)) { if($condition["str"]) { if (is_string($condition["str"])) { $where = $condition["str"]; } else { return false; } } if(is_array($condition["data"])) { $link = $condition["link"] ? $condition["link"] : "and"; list($conSql, $mapConData) = $this->FDFields($condition["data"], $link, $condition["judge"]); if ($conSql) { $where .= ($where ? " " . $link : "") . $conSql; $mapData = array_merge($mapData, $mapConData); } } } return array($where, $mapData); }
增编削查的详细实现DB.php
public function fetch($sql, $searchData = array(), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) { if ($sql) { $sql .= " limit 1"; $pdoStatement = $this->pdo->prepare($sql, $preType); $pdoStatement->execute($searchData); return $data = $pdoStatement->fetch($dataMode); } else { return false; } } public function fetchAll($sql, $searchData = array(), $limit = array(0, 10), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) { if ($sql) { $sql .= " limit " . (int) $limit[0] . "," . (intval($limit[1]) > 0 ? intval($limit[1]) : 10); $pdoStatement = $this->pdo->prepare($sql, $preType); $pdoStatement->execute($searchData); return $data = $pdoStatement->fetchAll($dataMode); } else { return false; } } public function insert($tableName, $data, $returnInsertId = false, $replace = false) { if(!empty($tableName) && count($data) > 0){ $sql = $replace ? "REPLACE INTO " : "INSERT INTO "; list($setSql, $mapData) = $this->FDFields($data); $sql .= $tableName . " set " . $setSql; $pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $execRet = $pdoStatement->execute($mapData); return $execRet ? ($returnInsertId ? $this->pdo->lastInsertId() : $execRet) : false; } else { return false; } } public function update($tableName, $data, $condition, $mapData = array(), $returnRowCount = true) { if(!empty($tableName) && count($data) > 0) { $sql = "UPDATE " . $tableName . " SET "; list($setSql, $mapSetData) = $this->FDFields($data); $sql .= $setSql; $mapData = array_merge($mapData, $mapSetData); list($where, $mapData) = $this->FDCondition($condition, $mapData); $sql .= $where ? " WHERE " . $where : ""; $pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $execRet = $pdoStatement->execute($mapData); return $execRet ? ($returnRowCount ? $pdoStatement->rowCount() : $execRet) : false; } else { return false; } } public function delete($tableName, $condition, $mapData = array()) { if(!empty($tableName) && $condition){ $sql = "DELETE FROM " . $tableName; list($where, $mapData) = $this->FDCondition($condition, $mapData); $sql .= $where ? " WHERE " . $where : ""; $pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $execRet = $pdoStatement->execute($mapData); return $execRet; } }
测试文件test.php
header("Content-type: text/html; charset=utf-8");define("APP_DIR", dirname(__FILE__)); if (function_exists("spl_autoload_register")) { spl_autoload_register("autoClass");} else { function __auto_load($className){ autoClass($className); }} function autoClass($className){ try{ require_once APP_DIR."/class/".$className.".php"; } catch (Exception $e) { die("Error:" . $e->getMessage() . "<br />"); }}$DB = new DB();//拔出$inData["a"] = rand(1, 100);$inData["b"] = rand(1, 1000);$inData["c"] = rand(1,200) . "." . rand(1,100);$ret = $DB->insert("a", $inData);echo "拔出" . ($ret ? "胜利" : "失利") . "<br/>";//更新$upConData["a"] = 100;$upConJudge["a"] = "<";$upConData["b"] = 30;$upConJudge["b"] = ">";list($upConStr, $mapUpConData) = $DB->FDField("b", 200, "<", "gt");$condition = array( "str" => $upConStr, "data" => $upConData, "judge" => $upConJudge, "link" => "and");$upData["a"] = rand(1, 10);$upData["b"] = 1;$upData["c"] = 1.00;$changeRows = $DB->update("a", $upData, $condition, $mapUpConData);echo "更新行数:" . (int) $changeRows . "<br/>";//删除$delVal = rand(1, 10);list($delCon, $mapDelCon) = $DB->FDField("a", $delVal);$delRet = $DB->delete("a", $delCon, $mapDelCon);echo "删除a=" . $delVal . ($delRet ? "胜利" : "失利") . "<br/>"; //查问$data["a"] = "10";$judge["a"] = ">";$data["b"] = "400";$judge["b"] = "<";list($conSql, $mapConData) = $DB->FDFields($data, "and", $judge);$mData = $DB->fetch("select * from a where " . $conSql . " order by `a` desc", $mapConData); var_dump($mData);
以上所述便是本文的全数内容了,但愿大师能够或许喜好。
上一篇: php实现文本数据导入SQL SERVER | 下一篇:PHP图象处置类库及演示分享