批改状态:合格
老师批语:创建数组请使用: [...], 不要再用array()函数, 这是非常过时的语法了
调试效果图

调试页代码截图
新增

删除

更新

查找

测试页代码 test.php:
<?php
/**
* Created by PhpStorm.
* User: A
* Date: 2019-08-03
* Time: 03:24
*/
include "./Db.php";
$db=new Db();
//功能测试
//1、增 新增一条数据 待插入的单条新数据 $data_1 = array("name.=.破军","sex.=.0","age.=.88","salary.=.7770");
echo "<br>";
$data_1 = array("name.=.破军","sex.=.0","age.=.88","salary.=.7770");
$res=$db->table("staff")->insert($data_1);
echo var_dump($res);
if($res){echo "新增单条数据成功";}else{echo"新增单条数据失败";};
//*************************************************************************************
//2、增 新增多条数据 多条新数据 $data_2 = array(array("name.=.风行者","age.=.38","salary.=.7800"), array("name.=.夜语","age.=.32","salary.=.7900"));
echo "<br>";
$data_2 = array(array("name.=.风行者","age.=.38","salary.=.7800"), array("name.=.夜语","age.=.32","salary.=.7900"));
$res= $db->table("staff")->insert($data_2);
echo var_dump($res);
if($res){echo "新增多条数据成功";}else{echo"新增多条数据失败";};
//************************************************************************************
//3、删除 删除一条记录 $where_1 = array("id.=.203");
echo "<br>";
$where_1 = array("id.=.203");
$res= $db->table("staff")->where($where_1)->delete();
if($res){echo "删除一条数据成功";}else{echo"删除一条数据失败";};
//************************************************************************************
//4、改 更新一条记录 $where_2 = array("salary.=.7900"); 更新为 :$data_1 =array("salary.=.9123");
echo "<br>";
$where_2 = array("salary.=.7900");
$data_1 =array("salary.=.9123");
$res= $db->table("staff")->where($where_2)->update($data_1);
if($res){echo "更新数据成功";}else{echo"更新数据失败";};
//************************************************************************************
//5、无条件查询 table("表名") field("显示字段列表") select() Db类中的查询方法
echo "<br>";
$res = $db->table("staff")->field("name,age,sex")->select();
foreach ($res as $val){
echo "<pre>";
print_r($val);
}
//************************************************************************************
//5、复合条件查询 条件 $where_4 = array("age.>.20","name.LIKE.%武%");
echo "<br>";
$where_4 = array("age.>.20","name.LIKE.%武%");
$res = $db->table("staff")->field("name,age,sex,salary")->where($where_4)->select();
foreach ($res as $val){
echo "<pre>";
print_r($val);
}点击 "运行实例" 按钮查看在线实例
Db类的定义代码
<?php
/**
* Created by PhpStorm.
* User: A
* Date: 2019-08-03
* Time: 01:24
*/
/* table()-> |field()->insert(array $data) 增 测试完成
-> |where(array $where_data)->delete(); 删 测试完成
-> |where(array $where)->update(array $data) 改 测试完成
-> |field()->where(array $where_data)->select() 查 测试完成
table( 参数类型 str ) 样例: table('user') 数据库语句中显示为: `user`
field( 参数类型 str ) 样例: field("name,sex,age,salary") 数据库语句中显示为:`name`,`sex`,`age`,`salary`
insert( 参数类型 array) 样例: insert( array("name.=.武破天","sex.=.0") )
where( 参数类型 array) 样例: where( array("age.>.25","name.link.武%","salary.in.(3000,8000)") );
array $data 属性数据样式: array("'小龙女',1,32,8000") 或 array("name.=.风尊者","age.=.29","salary.=.9000")
array $where 条件数据样式: array("`age`= 25","`name`= '武松'") 或 array("salary in (3000,9000)","`name` like '武%'")
*/
class Db{
private $sql = '';
private $table_name = '';
private $field = '*';
private $where = [];
private $where_or = [];
private $where_data =[];
private $where_data_or=[];
private $bind_data = [];
private $bind_values = [];
private $group = '';
private $having ='';
private $order = '';
private $limit = '';
//数据库连接 --构造函数
public function __construct()
{
require "./config.php";
try{
$this->pdo=new PDO($dns,$username,$password);
echo '数据库连接OK';
}catch(PDOException $e){
die('数据库连接失败'.$e->getMessage());
}
return $this;
}
//参数初始化重置
public function var_clear(){
$this->sql = '';
$this->table_name = '';
$this->field = '*';
$this->where = [];
$this->where_or = [];
$this->where_data =[];
$this->where_data_or =[];
$this->bind_data = [];
$this->bind_values =[];
$this->group = '';
$this->having ='';
$this->order = '';
$this->limit = '';
}
//数据库查询字段参数赋值获取 table('str参数')---------------------------------
public function table($table)
{
$this->table_name='`'.$table.'`';
return $this;
}
//指定查询字段 field('str参数')
public function field($field)
{
if($field=='*'){
$this->field = $field;
}else{
$fields= explode (',',$field);
$field_str='';
foreach($fields as $var)
{
$field_str .= '`'.$var.'`,';
}
$fields = rtrim($field_str,',');
$this->field = $fields;
}
return $this;
}
//指定查询条件 array("age.>.25","name.=.武松")
public function where(array $where)
{
$this->where = $where;
return $this;
}
//or条件查询
public function where_or(array $where)
{
$this->where_or = $where;
return $this;
}
//分组-简单字段分组
public function group($field)
{
$this->group = '`'.$field.'`';
return $this;
}
//分组-条件分组
public function having($having)
{
$this->having = $having;
return $this;
}
// 指定排序
public function order($order)
{
$this->order = $order;
return $this;
}
// 指定查询数量显示
public function limit($limit)
{
$this->limit = $limit;
return $this;
}
//数据库查询条件字段参数赋值获取 结束 ---------------------------------
// 一.自定义常用方法
//查询1条数据,多用于登录验证
public function item(){
$this->limit(1);
$this->_build_sql('select');
$stmt = $this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
$stmt->execute();
$item = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $item ? $item[0] : false;
}
// 二 : 常规数据操作
//1.新增操作-------------------------------------------------------------
public function insert(array $data)
{
$this->_build_sql('insert',$data);
$stmt=$this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
if(count($data)==count($data,1)){
if($stmt->execute())
{
$this->var_clear();
return true;
}else{
return false;
}
}else{
//绑定的属性名 : :varName
$data =$this->bind_data;
$values = $this->bind_values;
foreach ($data as $k => $var)
{
foreach($values as $val)
{
$tag = ltrim($val,':');
// $val = :属性名 $data[$k][$tag] 对应的属性值
$stmt->bindValue($val, $data[$k][$tag]);
}
if(!$stmt->execute()){ return false; }
}
$this->var_clear();
return true;
}
}
//2.删除操作 -------------------------------------------------------------
public function delete()
{
$this->_build_sql('delete');
$stmt=$this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
if($stmt->execute())
{
//echo '删除数据成功';
$this->var_clear();
return true;
}else{
return false;
}
}
//3.更新操作-------------------------------------------------------------------
public function update($data)
{
$this->_build_sql('update',$data);
$stmt=$this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
if($stmt->execute())
{
$this->var_clear();
return true;
}else{
return false;
}
}
//4.查询操作-------------------------------------------------------------------
public function select()
{
$this->_build_sql('select');
$stmt=$this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
$stmt->execute();
// if($stmt->execute())
// {
// echo '查询数据成功';
// }else{
// echo '查询数据失败';
// }
$res=$stmt->fetchAll(PDO::FETCH_ASSOC);
$this->var_clear();
// echo '<pre>';
// print_r($res);
return $res;
}
//5.统计总数-------------------------------------------------------------------
public function count_rows()
{
$this->_build_sql('count');
$stmt=$this->pdo->prepare($this->sql);
$this->_build_bind_value($stmt);
if($stmt->execute()){
$this->var_clear();
}
else{
echo "数据统计失败7";
}
$res = $stmt->fetchColumn(0);
return $res;
}
// 二 : 构造sql的语句生成
public function _build_sql($type,array $data=[])
{
switch ($type){
case 'insert':
$this->_build_sql_insert($data);
break;
case 'delete':
$this->_build_sql_delete();
break;
case 'update':
$this->_build_sql_update($data);
break;
case 'select':
$this->_build_sql_select();
break;
case 'count':
$this->_build_sql_count();
break;
}
}
//1.增:构造sql_insert生成 数据格式
// array("name.=.破军","sex.=.0","age.=.88","salary.=.7770")
public function _build_sql_insert(array $data)
{
//新增语句: INSERT INTO table_name ( column1,column2) VALUES (val1,val2),(val1,val2)
$insert_fields='';
$insert_values='';
$insert_data=[];
$insert_i_fields='';
$insert_i_values='';
if(count($data,0)==count($data,1))
{ //1条记录新增处理方式 一维数组数据
foreach ($data as $var)
{
$a = strpos($var,'.=');
$b = strrpos($var,'=.');
$insert_field = substr($var,0,$a);
$insert_var = substr($var,$b+2);
$insert_data["$insert_field"]=$insert_var;
$insert_fields .= ' `'.$insert_field.'`,';
$insert_values .=':'.$insert_field.',';
}
$this->bind_data = $insert_data;
$insert_fields=rtrim($insert_fields,',');
$this->field ='('.$insert_fields.')';
$insert_values = rtrim($insert_values,',');
$sql ="INSERT INTO {$this->table_name} {$this->field} VALUES ";
$sql .='('.$insert_values.')';
return $this->sql=$sql;
}else{
//多条记录新增方式,二维数组数据
//array(array("name.=.风行者","age.=.38","salary.=.7800"), array("name.=.夜语","age.=.32","salary.=.7900"));
for($i=0;$i<count($data,0);$i++)
{
foreach($data[$i] as $var)
{
$a = strpos($var,'.=');
$b = strrpos($var,'=.');
$insert_i_field = substr($var,0,$a);
$insert_i_value = substr($var,$b+2);
$insert_data[$i]["$insert_i_field"]=$insert_i_value;
if(!strstr($insert_i_fields,$insert_i_field)){
$insert_i_fields .= ' `'.$insert_i_field.'`,';
}
if(!strstr($insert_i_values,$insert_i_field)){
$insert_i_values .=':'.$insert_i_field.',';
}
}
$insert_fields=rtrim($insert_i_fields,',');
$insert_i_values = rtrim($insert_i_values,',');
}
$this->bind_data=$insert_data;
$this->bind_values=explode(',',$insert_i_values);
$this->field ='('.$insert_fields.')';
$insert_values ='('.$insert_i_values.'),';
$insert_values = rtrim($insert_values,',');
$sql ="INSERT INTO {$this->table_name} {$this->field} VALUES $insert_values";
return $this->sql=$sql;
}
}
//2.删:构造sql_delete生成
public function _build_sql_delete()
{
//删除语句: DELETE FROM table_name WHERE ???
$sql = "DELETE FROM {$this->table_name} ";
$sql .= $this->_build_sql_where();
return $this->sql=$sql;
}
//3.改:构造sql_update生成 数据格式
//条件格式 $where = array("age.>.25","name.link.武%","salary.in.(3000,8000)");
//数据格式 $data = $data_4 =array("salary.=.9800");
public function _build_sql_update(array $data)
{
//更新语句: UPDATE语句模板 UPDATE table_name set column1=value1,column1=value1 WHERE ?
$sql = "UPDATE {$this->table_name} SET ";
$update_str='';
$update_data =[];
foreach ($data as $var)
{
$a = strpos($var,'.=');
$b = strrpos($var,'=.');
$update_field = substr($var,0,$a);
$update_var = substr($var,$b+2);
$update_data["$update_field"]=$update_var;
$update_str .= ' `'.$update_field.'` = :'.$update_field.' ,';
}
$update_str = rtrim($update_str,' ,');
$this->bind_data = $update_data;
$sql .= $update_str;
$sql .= $this->_build_sql_where();
return $this->sql=$sql;
}
//4.查:构造sql_select生成 limit属于最后一个参数
public function _build_sql_select()
{
//查询数据SELECT语句模板 SELECT 字段列表 FROM table1,table2 [WHERE ] [GROUP BY] [ORDER BY] [LIMIT]
$sql="SELECT {$this->field} FROM {$this->table_name}";
if ($this->where){ $sql .= $this->_build_sql_where(); }
if ($this->where_or){ $sql .= $this->_build_sql_where_or(); }
if($this->group){ $sql .=" group by {$this->group}"; }
if($this->having){ $sql .=" having {$this->having}"; }
if ($this->order){ $sql .= " order by {$this->order}";}
if($this->limit){ $sql .= " limit {$this->limit}";}
return $this->sql=$sql;
}
//5.统计sql_count
public function _build_sql_count()
{
$where = $this->_build_sql_where();
$this->sql ="SELECT count({$this->field}) FROM {$this->table_name}{$where}";
return $this->sql;
}
//8.构造sql_where and 语句 生成
//数据的类型:array("age.>.25","name.=.武松","salary.in.(3000,8000),","sex.is.null","age.like.龙%");
public function _build_sql_where()
{
$where_data=[];
$where='';
$sql_where='';
if(empty($this->where)){
$sql_where='';
}else{
foreach ($this->where as $var)
{
$a = strpos($var,'.');
$b = strrpos($var,'.');
$c=$b-$a-1;
$where_field = substr($var,0,$a);
$where_tag = substr($var,$a+1,$c);
$where_var = substr($var,$b+1);
$where_data["w_$where_field"]=$where_var;
$where .= ' AND `'.$where_field.'` '.$where_tag.' :w_'.$where_field;
}
$this->where_data = $where_data;
// echo '<pre>';
// print_r($this->where_data);
// echo '--data<br>';
$where = ltrim($where," AND");
$sql_where .=" WHERE ".$where;
}
// echo $sql_where.'<br>';
return $sql_where;
}
//9.构造sql_where or 语句 生成
public function _build_sql_where_or()
{
$where_data_or = [];
$where_or='';
if(empty($this->where_or)){
$where_or='';
}else{
foreach ($this->where_or as $var)
{
$a = strpos($var,'.');
$b = strrpos($var,'.');
$c=$b-$a-1;
$where_field = substr($var,0,$a);
$where_tag = substr($var,$a+1,$c);
$where_var = substr($var,$b+1);
$where_data_or["r_$where_field"]=$where_var;
$where_or .= ' or `'.$where_field.'` '.$where_tag.' :r_'.$where_field;
}
$this->where_data_or = $where_data_or;
}
return $where_or;
}
//10.参数绑定,常见参数 where条件数组 where_or条件数组 update 更新数组 insert 新增数组
private function _build_bind_value($stmt)
{
if($this->where_data)
{
$where_data = $this->where_data;
foreach($where_data as $key=>$var)
{
// echo $key.'<br>';
// echo $var.'<br>';
$stmt->bindValue(':'.$key,$var);
}
}
if ($this->bind_data)
{
$data =$this->bind_data;
//判断数组是否为多维数组 多为数组数据处理在155行处理
if(count($data,0)==count($data,1)){
foreach($data as $k=>$v)
{
// echo $k.'--';
// echo $v.'<br>';
$stmt->bindValue(':'.$k,$v);
}
}
}
if($this->where_data_or)
{
$where_data_or = $this->where_data_or;
foreach($where_data_or as $key=>$var)
{
$stmt->bindValue(":".$key,$var);
}
}
}
}点击 "运行实例" 按钮查看在线实例
配置文件 confing.php
<?php /** * Created by PhpStorm. * User: A * Date: 2019-08-03 * Time: 01:20 * 说明 数据库连接参数 */ $dns="mysql:host=127.0.0.1;dbname=php"; $username='root'; $password='root';
点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号