把PDO方法库封装类的形式
<?php
//PDOdb类封装
Class MyDB{
// 连接参数
public $dsn;
public $user;
public $password;
// 连接属性
public $pdo;
// 连接方法
public function connect(){
// 使用PDO方式管理数据库, 连接成功则返回PDO对象,赋值给对象属性pdo
$this->pdo = new PDO($this->dsn, $this->user, $this->password);
}
// 希望在实例化时, 自动连接数据库, 这个需求很常见
public function __construct($dsn, $user, $password){
// 初始化对象属性
$this->dsn = $dsn;
$this->user = $user;
$this->password = $password;
// 自动调用对象方法,连接数据库
$this->connect();
}
/**
* 查询多条记录
* @param $table
* @param $fields
* @param string $where
* @return array
*/
public function select($table,$fields, $where='', $order='',$limit=''){
//拼接SQL语句
$sql = 'SELECT ';
if (is_array($fields)) {
foreach ($fields as $field) {
$sql .= $field.', ';
}
} else {
$sql .= $fields;
}
$sql = rtrim(trim($sql),',');
$sql .= ' FROM '.$table;
//查询条件
if(!empty($where)){
$sql .= ' WHERE '.$where;
}
//排序条件
if(!empty($order)) {
$sql .= ' order by '.$order;
}
//分页条件
if(!empty($limit)) {
$sql .= ' limit '.$limit;
}
$sql .= ';';
//创建PDO预处理对象
$stmt = $this->pdo->prepare($sql);
//执行查询操作
if($stmt->execute()){
if($stmt->rowCount()>0){
$stmt->setFetchMode(PDO::FETCH_ASSOC);
//返回一个二维数组
return $stmt->fetchAll();
}
} else {
return false;
}
}
/**
* 查询单条记录
* @param $table 表名
* @param $fields 返回值 *
* @param string $where 条件
* @return array
*/
public function find($table,$fields,$where=''){
$pdo = $this->pdo;
//创建SQL语句
$sql = 'SELECT ';
if (is_array($fields)) {
foreach ($fields as $field) {
$sql .= $field.', ';
}
} else {
$sql .= $fields;
}
$sql = rtrim(trim($sql),',');
$sql .= ' FROM '.$table;
//查询条件
if(!empty($where)){
$sql .= ' WHERE '.$where;
}
$sql .= ' LIMIT 1;';
//创建PDO预处理对象
$stmt = $pdo->prepare($sql);
//执行查询操作
if($stmt->execute()){
if($stmt->rowCount()>0){
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetch();
}
} else {
return false;
}
}
/***
*添加数据
*@param $table
*@param $data
*@return bool
***/
public function add($table,$data=[]){
//创建SQL语句
$sql = "INSERT INTO {$table} SET ";
//组装插入语句
if(is_array($data)){
foreach ($data as $k=>$v) {
$sql .= $k.'="'.$v.'", ';
}
}else{
return false;
}
//去掉尾部逗号,并添加分号结束
$sql = rtrim(trim($sql),',').';';
//创建PDO预处理对象
$stmt = $this->pdo->prepare($sql);
//执行新增操作
if($stmt->execute()){
if($stmt->rowCount()>0){
return true;
}
} else {
return false;
}
}
/**
* 更新数据
* @param $table
* @param $data
* @return bool
*/
public function update($table,$data=[], $where='') {
//创建SQL语句
$sql = "UPDATE {$table} SET ";
//组装修改语句
if(is_array($data)){
foreach ($data as $k=>$v) {
$sql .= $k.'="'.$v.'", ';
}
}
//去掉尾部逗号,并添加分号结束
$sql = rtrim(trim($sql),',');
//查询条件
if(!empty($where)){
$sql .= ' WHERE '.$where;
}
//创建PDO预处理对象
$stmt = $this->pdo->prepare($sql);
//执行新增操作
if($stmt->execute()){
if($stmt->rowCount()>0){
return true;
}
} else {
return false;
}
}
/**
* 删除数据
* @param $db
* @param $table
* @param string $where
* @return bool
*/
public function real_delete($table,$where=''){
//创建SQL语句
$sql = "DELETE FROM {$table} ";
//查询条件
if(!empty($where)){
$sql .= ' WHERE '.$where;
}
//创建PDO预处理对象
$stmt = $this->pdo->prepare($sql);
//执行删除操作
if($stmt->execute()){
if($stmt->rowCount()>0){
return true;
}
} else {
return false;
}
}
/**
* 统计数量
* @param $pdo
* @param $table
* @param string $where
* @return number
*/
public function count_num($table,$where=''){
//创建SQL语句
$sql = 'SELECT count(*) as count_number FROM '.$table;
//查询条件
if(!empty($where)){
$sql .= ' WHERE '.$where;
}
//创建PDO预处理对象
$stmt = $this->pdo->prepare($sql);
//执行查询操作
if($stmt->execute()){
if($stmt->rowCount()>0){
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$rows = $row['count_number'];
return $rows;
}
} else {
return false;
}
}
// 析构方法
public function __destruct(){
$this->pdo = null;
}
}
// 实例化
$mydb = new MyDB('mysql:host=localhost;dbname=php_2019', 'root', '******');
if ($mydb->pdo) {
echo '<h2>连接成功</h2>';
}
// // 读取数据库测试
// $stmt = $db->pdo->prepare('select * from user');
// $stmt->execute();
// foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) {
// print_r($user); echo '<br>';
// }
echo '<h3>查询多条:</h3>';
$res = $mydb->select('user','username');
echo '<pre>';
print_r($res);
echo '<hr>';
echo '<h3>查询一条:</h3>';
$res = $mydb->find('user','username','uid=1');
print_r($res);
echo '<hr>';
echo '<h3>添加数据:</h3>';
$data = [
'username' => 'xiaohong',
'password' => '123456',
];
$insert = $mydb->add('user',$data);
var_dump($insert);
echo '<hr>';
echo '<h3>更新数据:</h3>';
$data = [
'password' => '111111',
]; //这里密码的值不改,还是原来123456 居然执行结果会报null
$update = $mydb->update('user',$data,'uid=4');
var_dump($update);
echo '<hr>';
echo '<h3>删除数据:</h3>';
$delete = $mydb->real_delete('user','uid=4');
var_dump($delete);
echo '<hr>';
echo '<h3>统计:</h3>';
$count = $mydb->count_num('user');
echo $count;
echo '<pre>';
运行截图:
总结:温故而知新,只要写了就会有收获。方法库改为类这个作业确实很简单,不会写的时候就是缺少那个思想。