<?phpclass Db{//私有靜態屬性存儲實例化對象自身private static $instance;//存儲PDO類的實例化private $pdo;//PDOStatement類private $stmt;//禁止外部實例化對象,鏈接數據庫private function __construct($config,$port,$charset){try{$this->pdo = new PDO('mysql:host='.$config['host'].';dbname='.$config['dbname'].';charset='.$charset.';port='.$port.'',$config['user'],$config['password']);//開始事務回滾的錯誤警告$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch(PDOException $e){echo 'msyql error: '.$e->getMessage();}}//外部實例化public static function getInstance($config,$port=3306,$charset='utf8'){if(!self::$instance instanceof Db){self::$instance = new self($config,$port,$charset);}return self::$instance;}//插入數據public function insertData($table,$data){//拼接插入的數據庫字段名$columns = implode(',',array_keys($data));//憑借插入的數據$values = ':'.implode(',:',array_keys($data));$sql = "insert into $table ($columns) values ($values)";//處理date數據格式$newdata = $this->doData($data);//預處理sql,執行添加數據操作$this->doSql($sql,$newdata);//成功執行后返回插入數據的id,失敗返回錯誤信息if($this->stmt->errorCode()==00000){return $this->pdo->lastInsertId();}else{return $this->stmt->errorInfo()[2];}}//更新數據public function updateData($table,$data,$where){//檢查需要更新的數據是否存在if(!$this->getOne($table,array_keys($data)[0],$where)){echo '需要更新的數據不存在';return false;}//檢查傳入的數據并且拼接成字符串if(is_array($data)){$columns = '';foreach($data as $k=>$v){$columns.= $k.'=:'.$k.',';}$columns=rtrim($columns,',');}//sql語句$sql = "UPDATE $table SET $columns WHERE ".$where;//傳入的數組處理成pdo定的數據格式[':user_name'=>'lisi',':user_age'=>39]$newdata = $this->doData($data);//預處理sql,執行添加數據操作$this->doSql($sql,$newdata);//沒有錯誤返回1,有錯誤返回錯誤信息if($this->stmt->errorCode()==00000){return 1;}else{return $this->stmt->errorInfo()[2];}}//查詢一條數據public function getOne($table,$fields,$where){//檢查傳入的字段是否是數組if(is_array($fields)){if(count($fields)>1){$columns=implode(',',$fields);}else{$columns=$fields[0];} }else{$columns = $fields;}//查詢語句$sql = "SELECT $columns FROM $table WHERE ".$where.' LIMIT 1';//預處理sql,執行添加數據操作$this->doSql($sql);//獲得查詢的結果集$res = $this->stmt->fetch(PDO::FETCH_ASSOC);//如果沒有錯誤則返回查詢的結果集,否則返回錯誤信息if($this->stmt->errorCode()==00000){return $res;}else{return $this->stmt->errorInfo()[2];} }//查詢多條數據public function getAll($table,$fields,$where=1){//檢查傳入的字段是否是數組if(is_array($fields)){if(count($fields)>1){$columns=implode(',',$fields);}else{$columns=$fields[0];} }else{$columns = $fields;}//查詢語句$sql = "SELECT $columns FROM $table WHERE ".$where;//預處理sql,執行添加數據操作$this->doSql($sql);//獲得查詢的結果集$res = $this->stmt->fetchALL(PDO::FETCH_ASSOC);//如果沒有錯誤則返回查詢的結果集,否則返回錯誤信息if($this->stmt->errorCode()==00000){return $res;}else{return $this->stmt->errorInfo()[2];} }//刪除數據public function delData($table,$where){//檢查需要更新的數據是否存在if(!$this->getOne($table,['*'],$where)){echo '需要刪除的數據不存在';return false;}if(!$where){echo '請添加刪除條件';return false;}$sql = "DELETE FROM $table WHERE ".$where;//預處理sql,執行添加數據操作$this->doSql($sql);//如果沒有錯誤則返回查詢的結果集,否則返回錯誤信息if($this->stmt->errorCode()==00000){return 1;}else{return $this->stmt->errorInfo()[2];}}//處理傳入的數據private function doData($data){foreach($data as $k=>$v){$newk = ':'.$k;$newdata[$newk]=$v;}return $newdata;}//執行sql操作function doSql($sql,$data=null){//預處理sql$this->stmt=$this->pdo->prepare($sql);//執行添加數據操作$this->stmt->execute($data);}//禁止外部克隆private function __clone(){}}
$config = ['host'=>'127.0.0.1','dbname'=>'shop','user'=>'root','password'=>'root'];
$db = Db::getInstance($config,3306,'utf8');//插入數據
$table= 'user';
$data=['user_name'=>'sunliang','user_age'=>28,'sex'=>1,'email'=>'323424958@126.com','password'=>md5(123456),'money'=>544545.34];
echo $db->insertData($table,$data);
// $sql = 'insert into (username,password) values (:username,password)';
// $stmt = $db->prepare($sql);
// $data = [':username'=>'lisi',':password'=>123456];
// $stmt->execute($data);//修改數據
// $table = 'user';
// $data=['user_name'=>'sunliang','user_age'=>28,'email'=>'323424958@qq.com'];
// $sql = "update user set user_name=:username,user_age=:user_age,email=:email where id = 1";
// echo $db->updateData($table,$data,'id=18');
// $stmt = $db->prepare($sql);
// $stmt->execute($data);//查詢一條數據
// $table = 'user';
// $fields= ['user_name','id'];
// $sql = 'select user_name,email from user where id = 1';
// print_r($db->getOne($table,$fields,'id=2'));//查詢多條數據
// $table = 'user';
// $fields= ['user_name','id'];
// $sql = 'select user_name,email from user where id = 1';
// print_r($db->getAll($table,$fields));//刪除數據
// $table = 'user';
// echo $db->delData($table,'id=16');
簡單的數據庫類
轉載于:https://blog.51cto.com/woaijorden/2153207