社区
基础编程
帖子详情
##########用PHP开始你的MVC##########(二)抽象数据库接口
hahawen
2004-05-02 03:58:29
二、抽象数据库接口(利用数据操作管理类)
在用mvc模式开发的时候,model层负责数据库的所有操作,为了对数据库的操作进行统一的管理,我们需要定义一个数据库操作管理类,由他来接替所有的数据库操作,也就是整个系统中只有这个数据库操作管理类,可以直接对数据库进行操作,如果其他的类需要对数据库进行操作,那它就必须调用和通过这个类来实现。
下面的Db类就是一个这样的类。
...全文
81
8
打赏
收藏
##########用PHP开始你的MVC##########(二)抽象数据库接口
二、抽象数据库接口(利用数据操作管理类) 在用mvc模式开发的时候,model层负责数据库的所有操作,为了对数据库的操作进行统一的管理,我们需要定义一个数据库操作管理类,由他来接替所有的数据库操作,也就是整个系统中只有这个数据库操作管理类,可以直接对数据库进行操作,如果其他的类需要对数据库进行操作,那它就必须调用和通过这个类来实现。 下面的Db类就是一个这样的类。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hahawen
2004-05-11
打赏
举报
回复
顶最后一次
hahawen
2004-05-10
打赏
举报
回复
不是v,这个是m的末端.
v和c还没时间写呢.
xinyaoxp
2004-05-10
打赏
举报
回复
顶
showerXP
2004-05-03
打赏
举报
回复
嘿嘿。好像超越php里面我看过类似的文章。
hahawen (变态的大龄青年)兄没有讲清楚M-V-C他们怎么个分离。举的第二个例子是用在V中吗?如果是的话有很多M操作在一起。
hackfan
2004-05-02
打赏
举报
回复
ding
mistjin
2004-05-02
打赏
举报
回复
帅哥,五一也不休息?
凌晨三四点钟还在忙,辛苦了!!
我仅代表我自己象你表示五一节快乐!!!
hahawen
2004-05-02
打赏
举报
回复
/*
* example 1: 获取序列
* <?
* $db = new Db();
* $result = $db->getSeq('art_id', 2, 1);
* ?>
*/
/*
* example 2: 分页查询
* <?
* $db = new Db();
* $result = $db->&queryPage('select id,name from table', 2, 10, DB_FETCH_ASSOC);
* foreach($result as $row)
* echo $row['id'],'------'.$row['name'].'<br>';
* ?>
*/
/*
* example 3: 插入数据
* <?
* $db = new Db();
* $result = $db->execute("insert into table (id, name) values(1,'name')");
* if($result>0) echo '插入数据成功';
* else echo '插入数据失败';
* ?>
*/
hahawen
2004-05-02
打赏
举报
回复
<?php
/*
* 定义数据库联接选项
* @var DB_HOST string 数据库主机名称或地址
* @var DB_NAME string 数据库名称
* @var DB_USER string 数据库用户名称
* @var DB_PWD string 数据库用户的密码
* @var DB_PCONNECT boolean 是否建立持久连接
*/
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PWD', '');
define('DB_PCONNECT', true);
/*
*定义返回数据查询结果的类型
* @var DB_FETCH_ASSOC int 结果调用方式:$result['name']
* @var DB_FETCH_NUM int 结果调用方式:$result[0]
* @var DB_FETCH_BOTH int 结果调用方式:$result['name'] 或 $result[0]
* @var DB_FETCH_OBJECT int 结果调用方式:$result->name
*/
define('DB_FETCH_ASSOC', 0);
define('DB_FETCH_NUM', 1);
define('DB_FETCH_BOTH', 2);
define('DB_FETCH_OBJECT', 3);
/*
*定义默认序列发生器的名称
*/
define('DB_SEQUENCE_TABLENAME', 'sequences');
class Db{
/*
* 当前数据库联接选项
*/
var $dbHost = DB_HOST;
var $dbName = DB_NAME;
var $dbType = 'Mysql';
var $dbUser = DB_USER;
var $dbPwd = DB_PWD;
var $pcnn = DB_PCONNECT;
/*
* 当前数据库连接
*/
var $cnn = '';
/*
* 数据查询结果的返回类型
*/
var $queryFetchType = DB_FETCH_ASSOC;
/*
* 初始化函数
*/
function Db(){
$this->cnn = ($this->pcnn? mysql_connect($this->dbHost, $this->dbUser, $this->dbPwd):
mysql_connect($this->dbHost, $this->dbUser, $this->dbPwd)) or
$this->_halt('数据库连接错误');
mysql_select_db($this->dbName, $this->cnn) or $this->_halt('数据库选择错误');
}
/*
* 数据查询函数
*
* @param $sql string 数据查询语句
* @param $fetchType int 数据查询结果的返回类型
*
* @return array 数据查询结果
*/
function &query($sql, $fetchType=DB_FETCH_ASSOC){
$data = array();
$rs = &mysql_query($sql, $this->cnn) or $this->_halt('数据查询错误', $sql);
$exe = $this->_getCommand($fetchType);
while($row=&$exe($rs))
$data[] = &$row;
return $data;
}
/*
* 分页数据查询函数
*
* @param $sql string 数据查询语句
* @param $page int 当前预查询页码
* @param $pageSize int 每页显示多少条纪录
* @param $fetchType int 数据查询结果的返回类型
*
* 数据查询结果,以及数据的分页信息
* @return array('pageSize' => 每页显示的条数
* 'recordCount' => 总纪录数
* 'pageCount' => 总页数
* 'page' => 当前页码
* 'isFirst' => 是否第一页
* 'isLast' => 是否最后一页
* 'start' => 返回结果的第一条纪录的序号
* 'sql' => 查询的sql语句
* 'data' => 查询得到的数据结果
* )
* 数据查询结果,以及数据的分页信息
*/
function &queryPage($sql, $page=1, $pageSize=20, $fetchType=DB_FETCH_ASSOC){
$countSql = preg_replace('|SELECT.*FROM|i','SELECT COUNT(*) count FROM', $sql);
$data['pageSize'] = (int)$pageSize<1? 20: (int)$pageSize;
$data['recordCount'] = $this->getOne($countSql, 'count');
$data['pageCount'] = ceil($data['recordCount']/$data['pageSize']);
$data['page'] = $data['pageCount']==0? 0: ((int)$page<1? 1: (int)$page);
$data['page'] = $data['page']>$data['pageCount']? $data['pageCount']:$data['page'];
$data['isFirst'] = $data['page']>1? false: true;
$data['isLast'] = $data['page']<$data['pageCount']? false: true;
$data['start'] = ($data['page']==0)? 1: ($data['page']-1)*$data['pageSize']+1;
$data['sql'] = $sql.' LIMIT '.($data['start']-1).','.$data['pageSize'];
$data['data'] = &$this->query($data['sql'], $fetchType);
return $data;
}
/*
* 进行数据查询只返回第 1 行的数据
*
* @param $sql string 数据查询语句
* @param $fetchType int 数据查询结果的返回类型
*
* @return array 数据查询结果
*/
function &queryRow($sql, $fetchType=DB_FETCH_ASSOC){
$rs = &mysql_query($sql, $this->cnn) or $this->_halt('单行数据查询错误', $sql);
$exe = $this->_getCommand($fetchType);
return $exe($rs);
}
/*
* 进行数据查询只返回第 1 行第 n 列的数据
*
* @param $sql string 数据查询语句
* @param $field int 返回数据列的名称 或 数字序号
*
* @return string 返回单个字段的值
*/
function &getOne($sql, $field = 0){
$rs = &mysql_query($sql, $this->cnn) or $this->_halt('单个数据查询错误', $sql);
$row = mysql_fetch_array($rs);
return $row[$field];
}
/*
* 进行sql语句,包含 DELECT / INSERT / UPDATE.....的执行语句
*
* @param $sql string 数据查询语句
*
* @return string 返回该语句影响的数据行数
*/
function execute($sql){
$rs = mysql_query($sql) or $this->_halt('语句执行错误', $sql);
return mysql_affected_rows($this->cnn);
}
/*
* 得到最后一次插入数据的编号
*/
function getInsertId(){
return mysql_insert_id($this->cnn);
}
/*
* 序列发生器,用来生成不重复的序列值
*
* @param $fieldName string 序列的名称
* @param $step int 序列号间隔
* @param $start int 序列号的起始数值
*
* @return int 新的序列值
*/
function getSeq($fieldName, $step=1, $start=1){
$table = DB_SEQUENCE_TABLENAME;
$step = (int)$step;
$start = (int)$start;
$rs = mysql_query("UPDATE $table SET seq_num=seq_num+($step) WHERE seq_name='$fieldName'");
if(!$rs || mysql_affected_rows($this->cnn)<1){
$rs = mysql_query('SELECT * FROM '.DB_SEQUENCE_TABLENAME, $this->cnn);
if(!$rs){
$sql = "CREATE TABLE $table (
seq_name VARCHAR( 20 ) NOT NULL ,
seq_num BIGINT( 20 ) DEFAULT 1 NOT NULL ,
PRIMARY KEY (seq_name))";
$rs = mysql_query($sql) or $this->_halt('创建序列发生器表失败', $sql);
}
$rs = mysql_query("INSERT INTO $table VALUES('$fieldName', $start)") or
$this->_halt('添加新序列错误', $sql);
$seq = $start;
}else{
$seq = &$this->getOne("SELECT seq_num FROM $table WHERE seq_name='$fieldName'");
}
return $seq;
}
function _getCommand($fetchType){
switch($fetchType){
case DB_FETCH_ASSOC: $exe = 'mysql_fetch_assoc'; break;
case DB_FETCH_NUM: $exe = 'mysql_fetch_row'; break;
case DB_FETCH_BOTH: $exe = 'mysql_fetch_array'; break;
case DB_FETCH_OBJECT: $exe = 'mysql_fetch_object'; break;
default: $exe = 'mysql_fetch_array'; break;
}
return $exe;
}
function _halt($msg){
$errNo = mysql_errno($this->cnn);
$errStr = mysql_error($this->cnn);
die("数据库错误:$msg<br> $errNo : $errStr");
}
}
?>
php
_mvc_framework:基于 Slim
PHP
微框架的基本 MVC 框架和 API
PHP
通用框架 版本 0.1 ####
PHP
MVC 框架
PHP
MVC 框架利用 Slim
PHP
内置的 REST 后端(提供路由、中间件、服务器端缓存、通用视图等)、 Idiorm ORM 、 Smarty 模板和来自Symfony 的组件。 在模型中实现的Idiorm ORM允许对底层
数据库
进行
抽象
和定义,包括业务逻辑和数据操作(所有查询都由这个 ORM 处理,它还根据需要部分或全部接受原始 SQL)。 控制器通常由路由中定义的路径调用,用于委派任务和管理模型和视图的更新。 默认应用程序中的视图使用Smarty模板进行 HTML 交付,并且可以从其他客户端接收对JSON数据的请求以进行 API 访问。 目录概览(高级) ####根据: / /.htaccess /
php
.ini /README.md /app/ /public/ /settings.
php
####P
php
mvc-rets:基于
PHP
的 MVC 代码用于 RETS 数据访问和房地产搜索
#
php
mvc-rets ##基于
PHP
的 MVC 代码用于由 Mark Enriquez 提供的 RETS 数据访问和房地产搜索 我自己设计和实现的一个真实的 MVC 小例子,将流行的设计模式应用于我在上一份工作中开发的各种房地产网站。 模型目录包含扩展有用且相当安全的 PDO 类的数据
抽象
类。 我实现了一个扩展 PDO 的 Data 类,然后实现了一个扩展 Data 并允许向前迭代包含在 Data 子类中的搜索结果的 Query 类。 控制器目录包含业务逻辑的主控制器并将数据路由到视图,以及与模型对话以获取
数据库
以获取 SEO 信息的 SEO 控制器。 我发现为 SEO 创建一个单独的控制器可以提供更多的灵活性。 视图目录当然创建视图,但也使用循环视图,允许需要在循环上显示的数据(如任何列表等)位于主视图之外的一个地方。 这允许易于维护。 这一切最终都以一种实用的方式
基于
PHP
面向对象的自定义MVC框架项目开发
PHP
虽然抢手,但却是被号称容易掌握的编程语言。但作为一种技术,尤其是能够拿高薪的技术,事实上对于初级新人来说也并非是松能够学会,因为
PHP
也存在着两个巨大的拦路虎,那...第二,项目通用的核心架构MVC不好掌握。
scabrosfw:
PHP
Micro框架
#ScabrosFW-
PHP
微框架 特征: 这些是目前框架中存在的主要功能... 本机
PHP
模板支持 支持翻译 类自动加载 错误检测与处理 简单易学的应用程序组织 简单SQL
抽象
层 简单数据验证 简单响应消息约定 解耦的组件 想法: 此草稿工作的主要思想是: 通过复杂的路由,慢速的模型等逃避胖的MVC框架。 简化以允许快速开发,重点放在应该做什么上 因此,我们没有“模型”。 我们没有“控制器”。 我们鼓励开发人员将其工作组织在一组微控制器中以管理应用程序FLOW,并在一组类中解决应用程序LOGIC 。 通过三个简单的类来处理“模板”:屏幕布局和布局的布局; Tpl使用自定义数据解析本地
php
模板; 和T可以简化一些繁琐的任务(检查/显示var并转换tpl DATA )。 举例来说: 因此,如果要登录页面,则可以在任意位置的所需文件夹中创建一个“微控制器”。 该登录页面应检查是否
TrafficSigns:该平台的创建是为了传播收集到的垂直监管交通标志的信息
交通标志 ##Introduction 这个平台的创建是为了传播收集到的垂直监管交通标志的信息 演示: : ##使用的库 [后端]
PHP
5 的 ADODB 库 =>
PHP
的
数据库
抽象
库 Smarty-3.1.16 => 用于 MVC 设计的
PHP
Smarty 模板 [前端] JQuery => 用于操作、事件处理、动画和 Ajax 的 JavaScript 库 [蜜蜂] 谷歌地图 JavaScript API v3
基础编程
21,887
社区成员
140,363
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章