实现数据库连接单例化,有三要素 静态变量、静态实例化方法、私有构造函数 DPDO.PHP
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->DBPwd);
}
$this->pdo->query('SET NAMES UTF-8');
} catch(PDOException $e) {
die('Error:' . $e->getMessage() . '
');
}
}
}
用于处理字段映射,使用pdo的字段映射,可以有效避免sql注入
增删改查的具体实现DB.PHP
public function fetchAll($sql,$limit = array(0,10),$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,$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,$mapData = array()) {
if(!empty($tableName) && $condition){
$sql = 'DELETE FROM ' . $tableName;
list($where,array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$execRet = $pdoStatement->execute($mapData);
return $execRet;
}
}
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() . '
');
}
}
$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 ? '成功' : '失败') . '
';
//更新
$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,$mapUpConData);
echo '更新行数:' . (int) $changeRows . '
';
//删除
$delVal = rand(1,10);
list($delCon,$mapDelCon) = $DB->FDField('a',$delVal);
$delRet = $DB->delete('a',$delCon,$mapDelCon);
echo '删除a=' . $delVal . ($delRet ? '成功' : '失败') . '
';
//查询
$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);
以上所述就是本文的全部内容了,希望大家能够喜欢。