本文实例讲述了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数据库服务器名称:对象资源管理器->数据库->
asp.net 密码框赋值ADO.NET实现对SQL Server数据库的增删改查示例
了解了上一篇的ADO.NET简介,我们就可以来对数据库进行增删改查等基本操作了!下面是每种操作的具体实现。
先在自定义类的头部定义好数据库连接对象和连接字符串:
string conn
0踩
赏
0 赞