<?php$config = include 'config.php'; //引入数据库配置文件$model = new model($config);//测试案例// $savedata=['urname'=>'张三','mobile'=>12334123];// echo $model->table('ur')->inrt($savedata);// var_dump($model->table('ur')->where('id=5')->delete());// var_dump($model->table('ur')->limit('0,6')->field('urname,mobile')->where('id>1')->order('id desc')->lect());// $updatedata=['urname'=>'张三'];// var_dump($model->table('ur')->where('id=3')->update($updatedata));// var_dump($model->table('ur')->max('mobile'));// var_dump($model->table('ur')->getbyurname('张三'));// var_dump($model->sql);class model{//主机名protected $host;//用户名protected $ur;//密码protected $pwd;//数据库名protected $dbname;//字符集protected $chart;//数据库前缀protected $prefix;//数据库连接资源protected $link;//数据表名 这里可以自己指定表名protected $tablename;//sql语句protected $sql;//操作数组 存放的就是所有的查询条件protected $options;/*** 构造方法,对成员变量进行初始化** @param [type] $config*/function __construct($config){//对成员变量一一进行初始化$this->host = $config['db_host'];$this->ur = $confi爱护环境的作文g['db_ur'];$this->pwd = $config['db_pwd'];$this->dbname = $config['db_name'];$this->chart = $config['db_chart'];$this->prefix = $config['db_prefix'];//连接数据库$this->link = $this->connect();//得到数据表名 ur===>urmodel$this->tablename = $this->gettablename();//初始化option数组$this->initoptions();}/*** 连接数据库** @return void*/protected function connect(){$link = mysqli_connect($this->host, $this->ur, $this->pwd);if (!$link) {die('数据库连接失败');}//选择数据库mysqli_lect_db($link, $this->dbname);//设置字符集mysqli_t_chart($link, $this->chart);//返回连接成功的资源return $link;}/*** 得到数据表名** @return void*/protected function gettablename(){//第一种,如果设置了成员变量,那么通过成员变量来得到表名if (!empty($this->tablename)) {return $this->prefix . $this->tablename;}//第二种,如果没有设置成员变量,那么通过类名来得到表名//得到当前类名字符串$classname = get_class($this);//ur urmodel goods goodsmodel$table = strtolower(substr($classname, 0, -5));return $this->prefix . $table;}/*** 初始化option数组** @return void*/protected function initoptions(){$arr = ['where', 'table', 'field', 'order', 'group', 'having', 'limit'];foreach ($arr as $value) {//将options数组中这些键对应的值全部清空$this->options[$value] = '';if ($value === 'table') {$this->options[$value] = $this->tablename;} elif ($value == 'field') {$this->options[$value] = '*';}}}/*** field方法** @param [type] $field* @return void*/function field($field){//如果不为空,再进行处理if (!empty($field)) {if (is_string($field)) {$this->options['field'] = $field;} elif (is_array($field)) {$this->options['field'] = join(',', $field);}}return $this;}/*** //table方法** @param [type] $table* @return void*/function table($table){if (!empty($table)) {$this->options['table'] = $this->prefix . $table;}return $this;}/*** where方法** @param [type] $where* @return void*/function where($where){if (!empty($where)) {$this->options['where'] = 'where ' . $where;}return $this;}/*** group方法** @param [type] $group* @return void*/function group($group){if (!empty($group)) {$this->options['group'] = 'group by ' . $group;}return $this;}/*** having方法** @param [type] $having* @return void*/function having($having){if (!empty($having)) {$this->options['having'] = 'having ' . $having;}return $this;}/*** order方法** @param [type] $order* @return void*/function order($order){if (!empty($order)) {$this->options['order'] = 'order by ' . $order;}return $this;}/*** limit方法** @param [type] $limit* @return void*/function limit($limit){if (!empty($limit)) {if (is_string($limit)) {$this->options['limit'] = 'limit ' . $limit;} elif (is_array($limit)) {$this->options['limit'] = 'limit ' . join(',', $limit);}}return $thi让梦想起航s;}/*** lect方法** @return void*/function lect(){//先预写一个带占位符的sql语句$sql = 'lect %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** @param [type] $sql* @return void*/function query($sql){//清空option数组中的值$this->initoptions();//执行sql语句$result = mysqli_query($this->link, $sql);//提取结果集存放到数组中if ($result && mysqli_affected_rows($this->link)) {while ($data = mysqli_fetch_assoc($result)) {$newdata[] = $data;}}//返回结果集return $newdata;}/*** exec** @param [type] $sql* @param boolean $isinrt* @return void*/function exec($sql, $isinrt = fal){//清空option数组中的值$this->initoptions();//执行sql语句$result = mysqli_query($this->link, $sql);if ($result && mysqli_affected_rows($this->link)) {//判断是否是插入语句,根据不同的语句返回不同的结果if ($isinrt) {return mysqli_inrt_id($this->link);} el {return mysqli_affected_rows($this->link);}}return fal;}function __get($name){if ($name == 'sql') {return $this->sql;}return fal;}/*** inrt函数* inrt into 表名(字段) value(值)** @param [type] $data 关联数组,键就是字段名,值是字段值* @return void*/function inrt($data){//处理值是字符串问题,两边需要添加单或双引号$data = $this->parvalue($data);//提取所有的键,即就是所有的字段$keys = array_keys($data);//提取所有的值$values = array_values($data);//增加数据的sql语句$sql = 'inrt 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);}/*** 传递进来一个数组,将数组中值为字符串的两边加上引号** @param [type] $data* @return void*/protected function parvalue($data){//遍历数组,判断是否为字符串,若是字符串,将其两边添加引号foreach ($data as $key => $value) {if (is_string($value)) {$value = '"' . $value . '"';}$newdata[$key] = $value;}//返回处理后的数组return $newdata;}/*** 删除函数** @return void*/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 表名 t 字段名=字段值,字段名=字段值 where** @param [type] $data* @return void*/function update($data){//处理$data数组中值为字符串加引号的问题$data = $this->parvalue($data);//将关联数组拼接为固定的格式 键=值,键=值$value = $this->parupdate($data);//准备sql语句$sql = 'update %table% t %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);}/*** 将关联数组拼接为固定的格式** @param [type] $data* @return void*/protected function parupdate($data){foreach ($data as $key => $value) {$newdata[] = $key . '=' . $value;}return join(',', $newdata);}/*** max函数** @param [type] $field* @return void*/function max($field){//通过调用自己封装的方法进行查询$result = $this->field('max(' . $field . ') as max')->lect();//lect方法返回的是一个二维数组return $result[0]['max'];}/*** 析构方法*/function __destruct(){mysqli_clo($this->link);}/*** getbyname getbyage** @param [type] $name* @param [type] $args* @return void*/function __call($name, $args){//获取前5个字符$str = substr($name, 0, 5);//获取后面的字段名$field = strtolower(substr($name, 5));//判断前五个字符是否是getbyif ($str === 'getby') {return $this->where($field . '="' . $args[0] . '"')->lect();}return fal;}}
confing数据库配置文件,confing.php
<?phpreturn ['db_host'=>'localhost','db_ur'=>'root','db_pwd'=>'123456','db_name'=>'test','db_chart'=>'utf8','db_prefix'=>'t_',];
<?php
$config =
include
‘config.php’;
//引入数据库配置文件
$model =
new
model(
$config);
//测试案例
// $savedata=[‘urname’=>’张三’,’mobile’=>12334123];
// echo $model->table(‘ur’)->inrt($savedata);
// var_dump($model->table(‘ur’)->where(‘id=5’)->delete());
// var_dump($model->table(‘ur’)->limit(‘0,6’)->field(‘urname,mobile’)->where(‘id>1’)->order(‘id desc’)->lect());
// $updatedata=[‘urname’=>’张三’];
// var_dump($model->table(‘ur’)->where(‘id=3’)->update($upd汉殇帝atedata));
// var_dump($model->table(‘ur’)->max(‘mobile’));
// var_dump($model->table(‘ur’)->getbyurname(‘张三’));
// var_dump($model->sql);
class
model {
//主机名
protected
$host;
//用户名
protected
$ur;
//密码
protected
$pwd;
//数据库名
protected
$dbname;
//字符集
protected
$chart;
//数据库前缀
protected
$prefix;
//数据库连接资源
protected
$link;
//数据表名 这里可以自己指定表名
protected
$tablename;
//sql语句
protected
$sql;
//操作数组 存放的就是所有的查询条件
protected
$options;
/**
* 构造方法,对成员变量进行初始化
*
*
@param
[type] $config
*/
function
__construct(
$config) {
//对成员变量一一进行初始化
$this->
host =
$config[
‘db_host’];
$this->
ur =
$config[
‘db_ur’];
$this->
pwd =
$config[
‘db_pwd’];
$this->
dbname =
$config[
‘db_name’];
$this->
chart =
$config[
‘db_chart’];
$this->
prefix =
$config[
‘db_prefix’];
//连接数据库
$this->
link =
$this->
connect();
//得到数据表名 ur===>urmodel
$this->
tablename =
$this->
gettablename();
//初始化option数组
$this->
initoptions(); }
/**
* 连接数据库
*
*
@return
void
*/
protected
function
connect() {
$link =
mysqli_connect(
$this->
host,
$this->
ur,
$this->
pwd);
if (!
$link) {
die(
‘数据库连接失败’); }
//选择数据库
mysqli_lect_db(
$link,
$this->
dbname);
//设置字符集
mysqli_t_chart(
$link,
$this->
chart);
//返回连接成功的资源
return
$link; }
/**
* 得到数据表名
*
*
@return
void
*/
protected
function
gettablename() {
//第一种,如果设置了成员变量,那么通过成员变量来得到表名
if (!
empty(
$this->
tablename)) {
return
$this->
prefix .
$this->
tablename; }
//第二种,如果没有设置成员变量,那么通过类名来得到表名
//得到当前类名字符串
$classname =
get_class(
$this);
//ur urmodel goods goodsmodel
$table =
strtolower(
substr(
$classname,
0, –
5));
return
$this->
prefix .
$table; }
/**
* 初始化option数组
*
*
@return
void
*/
protected
function
initoptions() {
$arr = [
‘where’,
‘table’,
‘field’,
‘order’,
‘group’,
‘having’,
‘limit’];
foreach (
$arr as
$value) {
//将options数组中这些键对应的值全部清空
$this->
options[
$value] =
”;
if (
$value ===
‘table’) {
$this->
options[
$value] =
$this->
tablename; }
elif (
$value ==
‘field’) {
$this->
options[
$value] =
‘*’; } } }
/**
* field方法
*
*
@param
[type] $field
*
@return
void
*/
function
field(
$field) {
//如果不为空,再进行处理
if (!
empty(
$field)) {
if (
is_string(
$field)) {
$this->
options[
‘field’] =
$field; }
elif (
is_array(
$field)) {
$this->
options[
‘field’] =
join(
‘,’,
$field); } }
return
$this; }
/**
* //table方法
*
*
@param
[type] $table
*
@return
void
*/
function
table(
$table) {
if (!
empty(
$table)) {
$this->
options[
‘table’] =
$this->
prefix .
$table; }
return
$this; }
/**
* where方法
*
*
@param
[type] $where
*
@return
void
*/
function
where(
$where) {
if (!
empty(
$where)) {
$this->
options[
‘where’] =
‘where ‘ .
$where; }
return
$this; }
/**
* group方法
*
*
@param
[type] $group
*
@return
void
*/
function
group(
$group) {
if (!
empty(
$group)) {
$this->
options[
‘group’] =
‘group by ‘ .
$group; }
return
$this; }
/**
* having方法
*
*
@param
[type] $having
*
@return
void
*/
function
having(
$having) {
if (!
empty(
$having)) {
$this->
options[
‘having’] =
‘having ‘ .
$having; }
return
$this; }
/**
* order方法
*
*
@param
[type] $order
*
@return
void
*/
function
order(
$order) {
if (!
empty(
$order)) {
$this->
options[
‘order’] =
‘order by ‘ .
$order; }
return
$this; }
/**
* limit方法
*
*
@param
[type] $limit
*
@return
void
*/
function
limit(
$limit) {
if (!
empty(
$limit)) {
if (
is_string(
$limit)) {
$this->
options[
‘limit’] =
‘limit ‘ .
$limit; }
elif (
is_array(
$limit)) {
$this->
options[
‘limit’] =猪脚炖什么
‘limit ‘ .
join(
‘,’,
$limit); } }
return
$this; }
/**
* lect方法
*
*
@return
void
*/
function
lect() {
//先预写一个带占位符的sql语句
$sql =
‘lect %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
*
*
@param
[type] $sql
*
@return
void
*/
function
query(
$sql) {
//清空option数组中的值
$this->
initoptions();
//执行sql语句
$result =
mysqli_query(
$this->
link,
$sql);
//提取结果集存放到数组中
if (
$result &&
mysqli_affected_rows(
$this->
link)) {
while (
$data =
mysqli_fetch_assoc(
$result)) {
$newdata[] =
$data; } }
//返回结果集
return
$newdata; }
/**
* exec
*
*
@param
[type] $sql
*
@param
boolean
$isinrt
*
@return
void
*/
function
exec(
$sql,
$isinrt =
fal) {
//清空option数组中的值
$this->
initoptions();
//执行sql语句
$result =
mysqli_query(
$this->
link,
$sql);
if (
$result &&
mysqli_affected_rows(
$this->
link)) {
//判断是否是插入语句,根据不同的语句返回不同的结果
if (
$isinrt) {
return
mysqli_inrt_id(
$this->
link); }
el {
return
mysqli_affected_rows(
$this->
link); } }
return
fal; }
function
__get(
$name) {
if (
$name ==
‘sql’) {
return
$this->
sql; }
return
fal; }
/**
* inrt函数
* inrt into 表名(字段) value(值)
*
*
@param
[type] $data 关联数组,键就是字段名,值是字段值
*
@return
void
*/
function
inrt(
$data) {
//处理值是字符串问题,两边需要添加单或双引号
$data =
$this->
parvalue(
$data);
//提取所有的键,即就是所有的字段
$keys =
array_keys(
$data);
//提取所有的值
$values =
array_values(
$data);
//增加数据的sql语句
$sql =
‘inrt 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); }
/**
* 传递进来一个数组,将数组中值为字符串的两边加上引号
*
*
@param
[type] $data
*
@return
void
*/
protected
function
parvalue(
$data) {
//遍历数组,判断是否为字符串,若是字符串,将其两边添加引号
foreach (
$data as
$key =>
$value) {
if (
is_string(
$value)) {
$value =
‘”‘ .
$value .
‘”‘; }
$newdata[
$key] =
$value; }
//返回处理后的数组
return
$newdata; }
/**
* 删除函数
*
*
@return
void
*/
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 表名 t 字段名=字段值,字段名=字段值 where
*
*
@param
[type] $data
*
@return
void
*/
function
update(
$data) {
//处理$data数组中值为字符串加引号的问题
$data =
$this->
parvalue(
$data);
//将关联数组拼接为固定的格式 键=值,键=值
$value =
$this->
parupdate(
$data);
//准备sql语句
$sql =
‘update %table% t %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); }
/**
* 将关联数组拼接为固定的格式
*
*
@param
[type] $data
*
@return
void
*/
protected
function
parupdate(
$data) {
foreach (
$data as
$key =>
$value) {
$newdata[] =
$key .
‘=’ .
$value; }
return
join(
‘,’,
$newdata); }
/**
* max函数
*
*
@param
[type] $field
*
@return
void
*/
function
max(
$field) {
//通过调用自己封装的方法进行查询
$result =
$this->
field(
‘max(‘ .
$field .
‘) as max’)->
lect();
//lect方法返回的是一个二维数组
return
$result[
0][
‘max’]; }
/**
* 析构方法
*/
function
__destruct() {
mysqli_clo(
$this->
link); }
/**
* getbyname getbyage
*
*
@param
[type] $name
*
@param
[type] $args
*
@return
void
*/
function
__call(
$name,
$args) {
//获取前5个字符
$str =
substr(
$name,
0,
5);
//获取后面的字段名
$field =
strtolower(
substr(
$name,
5));
//判断前五个字符是否是getby
if (
$宋初四大书院str ===
‘getby’) {
return
$this->
where(
$field .
‘=”‘ .
$args[
0] .
‘”‘)->
lect(); }
return
fal; } }
本文发布于:2023-04-06 22:59:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/fdfa4a777727d32942aa62575acd46d4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php学习之Model类.doc
本文 PDF 下载地址:php学习之Model类.pdf
留言与评论(共有 0 条评论) |