本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:
<"../Config/config.php";
class Model extends PDO
{
protected $tableName = "";//存储表名
protected $sql = "";//存储最后执行的SQL语句
protected $limit = "";//存储limit条件
protected $order = "";//存储order排序条件
protected $field = "*";//存储要查询的字段
protected $where = "";//存储where条件
protected $allFields = [];//存储当前表的所有字段
/**
* 构造方法 初始化
* @param string $tableName 要操作的表名
*/
public function __construct($tableName)
{
//连接数据库
parent::__construct('mysql:host='.HOST.';dbname='.DB.';charset=utf8;port='.PORT,USER,PWD);
//存储表名
$this->tableName = PRE.$tableName;
//获取当前数据表中有哪些字段
$this->getFields();
}
/**
* 获取当前表的所有字段
* @return array 成功则返回一维数组字段
*/
public function getFields()
{
//查看当前表结构
$sql = "desc {$this->tableName}";
$res = $this->query($sql);//返回pdo对象
//var_dump($res);
if ($res) {
$arr = $res->fetchAll(2);
//var_dump($arr);
//从二维数组中取出指定下标的列
$this->allFields = array_column($arr,"Field");
return $this->allFields;
} else {
die("表名错误");
}
}
/**
* 添加操作
* @param array $data 要添加的数组
* @return int 返回受影响行数
*/
public function add($data)
{
//判断是否是数组
if (!is_array($data)) {
return $this;
}
//判断是否全是非法字段
if (empty($data)) {
die("非法字段");
}
//过滤非法字段
foreach($data as $k => $v){
if (!in_array($k,$this->allFields)) {
unset($data[$k]);
}
}
//将数组中的键取出
$keys = array_keys($data);
//将数组中取出的键转为字符串拼接
$key = implode(",",$keys);
//将数组中的值转化为字符串拼接
$value = implode("','",$data);
//准备SQL语句
$sql = "insert into {$this->tableName} ({$key}) values('{$value}')";
$this->sql = $sql;
//执行并发送SQL,返回受影响行数
return (int)$this->exec($sql);
}
/**
* 删除操作
* @param string $id 要删除的id
* @return int 返回受影响行数
*/
public function delete($id="")
{
//判断id是否存在
if (empty($id)) {
$where = $this->where;
}else{
$where = "where id={$id}";
}
$sql = "delete from {$this->tableName} {$where}";
$this->sql = $sql;
//执行并发送SQL,返回受影响行数
return (int)$this->exec($sql);
}
/**
* 修改操作
* @param array $data 要修改的数组
* @return int 返回受影响行数
*/
public function update($data)
{
//判断是否是数组
if (!is_array($data)){
return $this;
}
//判断是否全是非法字段
if (empty($data)) {
die('全是非法字段');
}
$str = "";
//过滤非法字段
foreach ($data as $k=>$v) {
//字段为id时,判断id是否存在的
if ($k == "id"){
$this->where = "where id={$v}";
unset($data[$k]);
continue;
}
//若字段不为id,则过滤后再拼接成set字段
if (in_array($k, $this->allFields)) {
$str .= "{$k}='{$v}',";
} else {
unset($data[$k]);
}
}
//判断是否传了条件
if (empty($this->where)) {
die('请传入修改条件');
}
//去除右边的,
$str = rtrim($str, ',');
$sql = "update {$this->tableName} set {$str} {$this->where}";
//echo $sql;
$this->sql = $sql;
return (int)$this->exec($sql);
}
/**
* 查询多条数据
* @return array 成功返回二维数组,失败返回空数组
*/
public function select()
{
$sql = "select {$this->field} from {$this->tableName} {$this->where} {$this->order} {$this->limit}";
$this->sql = $sql;
//执行SQL,结果集是一个对象
$res = $this->query($sql);
//判断是否查询成功,
if ($res){
//成功返回二维数组
return $res->fetchAll(2);
}
//失败返回空数组
return [];
}
/**
* 查询一条数组
* @param string $id 要查询的id
* @return array 返回一条数据
*/
public function find($id="")
{
//判断是否存在id
if (empty($id)){
$where = $this->where;
}else{
$where = "where id={$id}";
}
$sql = "select {$this->field} from {$this->tableName} {$where} {$this->order} limit 1";
$this->sql = $sql;
//执行sql,结果集为对象
$res = $this->query($sql);
//判断是否查询成功
if ($res){
//成功则返回一条数据(一维数组)
$result = $res->fetchAll(2);
return $result[0];
}
//失败返回空数组
return [];
}
/**
* 统计总数目
* @return int 返回总数
*/
public function count()
{
$sql = "select count(*) as total from {$this->tableName} {$this->where} limit 1";
$this->sql = $sql;
//执行SQL,结果集为对象
$res = $this->query($sql);
//处理结果集
if ($res){
$result = $res->fetchAll(2);
//var_dump($result);
return $result[0]["total"];
}
return 0;
}
/**
* 设置要查询的字段信息
* @param string $field 要查询的字段
* @return object 返回自己,保证连贯操作
*/
public function field($field)
{
//判断字段是否存在
if (empty($filed)){
return $this;
}
$this->field = $field;
return $this;
}
/**
* 获取最后执行的sql语句
* @return string sql语句
*/
public function _sql()
{
return $this->sql;
}
/**
* where条件
* @param string $where 要输入的where条件
* @return object 返回自己,保证连贯操作
*/
public function where($where)
{
$this->where = "where ".$where;
return $this;
}
/**
* order条件
* @param string $order 要输入的order条件
* @return object 返回自己,保证连贯操作
*/
public function order($order)
{
$this->order = "order by ".$order;
return $this;
}
/**
* limit条件
* @param string $limit 要输入的limit条件
* @return object 返回自己,保证连贯操作
*/
public function limit($limit)
{
$this->limit = "limit ".$limit;
return $this;
}
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com
暂无“PHP封装的数据库模型Model类完整示例【基于PDO】”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。