• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php中PDO方式实现数据库的增删改查_php实例

php 搞代码 4年前 (2022-01-25) 22次浏览 已收录 0个评论

需要开启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->FDField<a>@本文9来源gao($daima.com搞@代@#码8网^</a><strong>搞代gaodaima码</strong>s($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'] = '';list($upConStr, $mapUpConData) = $DB->FDField('b', 200, ' $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'] = 'FDFields($data, 'and', $judge);$mData = $DB->fetch('select * from a where ' . $conSql . ' order by `a` desc', $mapConData); var_dump($mData);

以上所述就是本文的全部内容了,希望大家能够喜欢。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php中PDO方式实现数据库的增删改查_php实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址