model模型php,php 5.6.3PHP封装的数据库模型Model类完整示例【基于PDO】

本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:

//引入配置文件

include "../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 5.6.3PHP封装的数据库模型Model类完整示例【基于PDO】

https://www.002pc.comhttps://www.002pc.com/phpbiancheng/3093.html

你可能感兴趣的示例,PDO,Model,PHP,封装,数据库

wind 7 mysql 配置MySql数据库的主从备份配置

一、数据库双机备份建立两个数据库,一个为主一个为次,在数据库层面实现同步。明白什么时候同步,怎么配置。程序中怎么实现读写分离?从主库写,从备份库读?BaseDao类封装数据库访问

asp.net wcfASP.NET中各种连接数据库的配置的方法及json数据转换

一、数据库连接语句

1、MSSQL数据库链接示例

python 3.4 视频教程Django数据库类库MySQLdb使用详解

Django项目要操作数据库,首先要和数据库建立连接,才能让程序中的数据和数据库关联起来进行数据的增删改查操作Django项目默认使用mysqldb模块进行和mysql数据库之间的交互操作

mysql数据表相加java定时备份数据库

java定时备份数据库,有需要的朋友可以参考下。

mysql时间类型转化如何快速将sql文件导入mysql数据库中

今天见一位PHP同行在将从服务器MYSQL数据库导出的SQL文件导入到本地MYSQL数据库,见他所用的方法很惊讶,他是用editplus打开下载下来的SQL文件,复制所有内容,然后再粘贴

mysql-workbencemysql 导入导出数据库、数据表的方法

导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test 数据库的test_user 表中[root@test ~]# mysql -uroot -

mysql 转换小写IntelliJ IDEA怎么连接MySQL数据库?

IntelliJ IDEA连接MySQL数据库的步骤:1、从菜单View→Tool Windows→Database打开数据库工具窗口,如下图所示:2、点击Database工具窗口左上角添加按钮“+”,

python 2.7 安装目录python如何连接数据库

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

asp短期培训班ASP连接SQL2005数据库连接代码

说明: a、以下字符中数据库名forum,数据库服务器名WWW-2443D34E558\SQL2005(或者127.0.0.1) b、查看sql数据库服务器名称:对象资源管理器->数据库-&gt

asp.net 密码框赋值ADO.NET实现对SQL Server数据库的增删改查示例

了解了上一篇的ADO.NET简介,我们就可以来对数据库进行增删改查等基本操作了!下面是每种操作的具体实现。

先在自定义类的头部定义好数据库连接对象和连接字符串:

string conn

0踩

0 赞

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值