数据库类php,PHP数据库类

$config=include 'config.php';

$m=new Model($config);

/// 调用这个函数时,要把数据表名写上去,写成常量的形式,要不然不执行

var_dump($m->getByName('成龙'));

/// 测试max函数

/// var_dump($m->table('demo')->max('money'));

/// 测试update函数

/// $data=['name'=>'成龙','money'=>'2222'];

/// var_dump($m->table('demo')->where('id=4')->update($data));

/// 测试delete函数

/// var_dump($m->table('demo')->where('id=3')->delete());

/// 测试insert函数

/// $data=['age'=>30,'name'=>'成龙','money'=>'2000'];

/// $insertId= $m->table('demo')->insert($data);

/// var_dump($insertId);

/// 测试select函数

/// $m->limit('0,5')->table('demo')->field('age,name')->order('money desc')->where('id>1')->select();

/// var_dump($m->sql);

/// var_dump($m->limit('0,5')->table('demo')->field('age,name')->order('money desc')->where('id>1')->select());

var_dump($m->sql);

class Model{

/// 主机名

protected $host;

/// 用户名

protected $user;

/// 密码

protected $pwd;

/// 数据库名

protected $dbname;

/// 字符集

protected $charset;

/// 数据表前缀

protected $prefix;

/// 数据库连接资源

protected $link;

/// 数据表名 这里可以自己指定表明

protected $tableName;

如果调用getByName ,要把表名写上去 protected $tableName='demo';

/// sql语句

protected $sql;

/// 操作数组 存放所有的查询条件

protected $options;

/// 构造方法,对成员属性进行初始化

function __construct($config){

/// 对成员变量一一进行初始化

$this->host=$config['DB_HOST'];

$this->user=$config['DB_USER'];

$this->pwd=$config['DB_PWD'];

$this->dbname=$config['DB_NAME'];

$this->charset=$config['DB_CHARSET'];

$this->prefix=$config['DB_PREFIX'];

/// 连接数据库

$this->link=$this->connect();

///得到数据表名

$this->tableName=$this->getTableName();

/// 初始化options数组

$this->initOptions();

}

protected function connect(){

/// 连接数据库

$link=mysqli_connect($this->host,$this->user,$this->pwd);

if(!$link){

die('数据库连接失败');

}

/// 选择数据库

mysqli_select_db($link,$this->dbname);

/// 设置字符集

mysqli_set_charset($link,$this->charset);

/// 返回连接成功的资源

return $link;

}

protected function getTableName(){

/// 第一种,如果设置了成员变量,那么通过成员变量来得到表名

if(!empty($this->tableName)){

return $this->prefix.$this->tableName;

}

/// 第二种,如果没有设置成员变量,那么通过类名来得到表名

/// 得到当前类名字符串

$className=get_class($this);

/// user UserModel goods GoodsModel

$table=strtolower(substr($className,0,-5)) ;

return $this->prefix.$table;

}

protected function initOptions(){

$arr=['where','table','field','order','group','having','limit'];

foreach($arr as $value){

/// 将options数组中这些键对应的值全部清空

$this->options[$value]='';

/// 将table默认设置为tableName

if($value=='table'){

$this->options[$value]=$this->tableName;

}else if($value=='field'){

$this->options[$value]='*';

}

}

}

/// field方法

function field($field){

/// 如果不为空,再进行处理

if(!empty($field)){

if(is_string($field)){

$this->options['field']=$field;

}else if(is_array($field)){

$this->options['field']=join(',',$field);

}

}

return $this;

}

/// table方法

function table($table){

if(!empty($table)){

$this->options['table']=$table;

}

return $this;

}

/// where方法

function where($where){

if(!empty($where)){

$this->options['where']='where '.$where;

}

return $this;

}

/// group方法

function group($group){

if(!empty($group)){

$this->options['group']='group by '.$group;

}

return $this;

}

/// having方法

function having($having){

if(!empty($having)){

$this->options['having']='having '.$having;

}

return $this;

}

/// order方法

function order($order){

if(!empty($order)){

$this->options['order']='order by '.$order;

}

return $this;

}

/// limit方法

function limit($limit){

if(!empty($limit)){

if(is_string($limit)){

$this->options['limit']='limit '.$limit;

}else if(is_array($limit)){

$this->options['limit']='limit '.join(',',$limit);

}

}

return $this;

}

/// select方法

function select(){

/// 先预写一个带有占位符的sql语句

$sql='select %FIELD% from %TABLE% %WHERE% %GROUP% %HAVING% %ORDER% %LIMIT%';

/// 将options中对应的值依次的替换上面的占位符

$sql=str_replace(['%FIELD%','%TABLE%','%WHERE%','%GROUP%','%HAVING%','%ORDER%','%LIMIT%'],[$this->options['field'],$this->options['table'],$this->options['where'],$this->options['group'],$this->options['having'],$this->options['order'],$this->options['limit']],$sql);

/// 保存一份sql语句

$this->sql=$sql;

/// 执行sql语句

return $this->query($sql);

}

/// query

function query($sql){

/// 清空options数组中的值

$this->initOptions();

/// var_dump($sql);

/// die();

/// 执行sql语句

$result=mysqli_query($this->link,$sql);

/// 提取结果集存放在数组中

if($result&&mysqli_affected_rows($this->link)){

while($data=mysqli_fetch_assoc($result)){

$newData[]=$data;

}

}

/// 返回结果集

return $newData;

}

/// 获取sql语句

function __get($name){

if($name=='sql'){

return $this->sql;

}

return false;

}

/// exec

function exec($sql,$isInsert=false){

/// 清空options数组

$this->initOptions();

/// 执行sql语句

$result=mysqli_query($this->link,$sql);

if($result&&mysqli_affected_rows($this->link)){

/// 判断是否是插入语句,根据不同的语句返回不同的结果

if($isInsert){

return mysqli_insert_id($this->link);

}else {

return mysqli_affected_rows($this->link);

}

}

return false;

}

/// insert函数

/// $data:关联数组,键就是字段名,值就是字段值

/// insert into table(字段) value(值)

function insert($data){

/// 处理值是字符串问题,两边需要添加单或双引号

$data=$this->parseValue($data);

/// 提取所有的键,即就是所有的字段

$keys=array_keys($data);

/// 提取所有的值

$values=array_values($data);

/// 增加数据的sql语句

$sql='insert into %TABLE%(%FIELD%) values(%VALUES%)';

$sql=str_replace(['%TABLE%','%FIELD%','%VALUES%'],

[$this->options['table'],join(',',$keys),join(',',$values)],$sql);

$this->sql=$sql;

return $this->exec($sql,true);

}

/// 传递进来一个数组,将数组中值为字符串的两边加上引号

protected function parseValue($data){

/// 遍历数组,判断是否为字符串,若是字符串,将其两边添加引号

foreach($data as $key=>$value){

if(is_string($value)){

$value='"'.$value.'"';

}

$newData[$key]=$value;

}

/// 返回处理后的数组

return $newData;

}

/// 删除函数

function delete(){

/// 拼接sql语句

$sql='delete from %TABLE% %WHERE% ';

$sql=str_replace(['%TABLE%','%WHERE%'],[$this->options['table'],$this->options['where']],$sql);

/// 保存sql语句

$this->sql=$sql;

/// 执行sql语句

return $this->exec($sql);

}

/// 更新函数

/// update 表明 set 字段名=字段值 where 条件

function update($data){

/// 处理$data数组中值为字符串加引号问题

$data=$this->parseValue($data);

/// 将关联数组拼接为固定的格式 键=值

$value=$this->parseUpdate($data);

/// 准备sql语句

$sql='update %TABLE% set %VALUE% %WHERE% ';

$sql=str_replace(['%TABLE%','%VALUE%','%WHERE%'],[$this->options['table'],$value,$this->options['where']],$sql);

/// 保存sql语句

$this->sql=$sql;

/// 执行sql语句

return $this->exec($sql);

}

protected function parseUpdate($data){

foreach ($data as $key =>$value){

$newData[]=$key.'='.$value;

}

return join(',',$newData);

}

/// max函数

function max($field){

/// 通过调用自己的封装的方法进行查询

$result=$this->field('max('.$field.') as max')->select();

/// select方法返回的是一个二维数组

return $result[0]['max'];

}

/// 析构方法

function __destruct(){

mysqli_close($this->link);

}

/// getByName getByAge

/// __call

function __call($name,$args){

/// 获取前五个字符

$str=substr($name,0,5);

/// 获取后面的字段名

$field=strtolower(substr($name,5)) ;

/// 判断前五个字符是否是getby

if($str=='getBy'){

return $this->where($field.'="'.$args[0].'"')->select();

}

return false;

}

}

?>

  config.php

return [

'DB_HOST'=>'localhost',

'DB_USER'=>'root',

'DB_PWD'=>'12345678',

'DB_NAME'=>'ceshi',

'DB_CHARSET'=>'utf8',

'DB_PREFIX'=>''

];

?>

标签:function,return,数据库,sql,table,PHP,data,options

来源: https://www.cnblogs.com/summerGraden/p/11571929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值