一 Model 层
在php框架中model 有没有必要存在,很有必要. 是否需要每一个表单独写一个model ?? 很多只有几个字段的表,她们除了增删改查之外没有任何独特的业务逻辑,而增删改查是每个数据都需要的基本逻辑. 完全可以抽象到一个父类.
二 model 设计
model 层封装成只有CURD的操作,单例DB类.
三 实现代码
把我的完全代码贴在这里了
1 <?php 2 /** 3 * @ file base model class 4 * @ author yuxing@sina.book.com 5 */ 6 class sina_model{ 7 8 private $lastSql= ''; 9 private $optarr = array( 10 'table'=>'', 11 'field'=>'', 12 'where'=>'', 13 'limit'=>'', 14 ); 15 public $conn; 16 static $instance = null; 17 private $_config=array(); 18 public function __construct($config=array()) 19 { 20 if(is_array($config) &&!empty($config)){ 21 $this->_config= array_merge($this->_config,$config); 22 } 23 } 24 25 26 /** 27 * @ 单例模式获取DB类 28 * @ 实例化db类,不一定要连接数据库 29 */ 30 public static function getInstance(){ 31 if(is_null(self::$instance)){ 32 self::$instance = new sina_model(); 33 } 34 return self::$instance; 35 } 36 37 /** 38 * @ 连接数据库 39 */ 40 public function connect($config=null){ 41 if(is_null($config)){ 42 die('没有数据库连接参数'); 43 } 44 $this->conn = @mysql_connect($config['host'],$config['user'],$config['pwd']); 45 if(is_null($this->conn)){ 46 die(@mysql_error()); 47 } 48 return $this; 49 } 50 51 /** 52 * @ 选择数据库 53 */ 54 public function selectDb($config=null){ 55 $config = array_merge($config,$this->_config); 56 if(is_null($config['dbname'])){ 57 exit('数据库不能为空'); 58 } 59 @mysql_select_db($config['dbname'],$this->conn); 60 return $this; 61 } 62 63 /** 64 * @ 构造SQL 语句 65 * @ 链式操作 66 */ 67 // SELECT || INSERT || UPDATE || DELETE || 68 69 public function __call($name, $args) 70 { 71 // TODO: Implement __call() method. 72 // $name 为方法名 73 // $args 为参数 74 if(array_key_exists($name,$this->optarr)){ 75 $this->optarr[$name] = $args['0']; 76 } 77 return $this; //返回自身,用于链式 78 } 79 80 /** 81 * @ func 获取上次执行的sql语句. 82 */ 83 public function getLastSql(){ 84 return $this->lastSql; 85 } 86 87 /** 88 * @ func 查询sql 语句 89 */ 90 public function select(){ 91 $sql = "SELECT ". $this->optarr['field']." FROM {$this->optarr['table']} WHERE {$this->optarr['where']} "; 92 if(!empty($this->optarr['limit'])){ 93 $sql .=" LIMIT {$this->optarr['limit']}"; 94 } 95 $this->lastSql = $sql; 96 $res = @mysql_query($sql,$this->conn); 97 return $res; 98 } 99 100 /** 101 * @ update 操作 102 */ 103 public function update (){ 104 105 } 106 /** 107 * @ func insert 语句 108 */ 109 110 /** 111 * @ func change array to string 112 */ 113 public function arr2str($arr) 114 { 115 $res = is_array($arr) ? implode(',',$arr) : $arr; 116 return $res; 117 } 118 /** 119 * 120 */ 121 }
使用方法. 在其他地方引入,本人在Controller引入
1 require_once(SYS_PATH.'core'.DIRECTORY_SEPARATOR.'sina_model'.EXT);
Controller 代码里面调用
1 $db=new sina_model(); 2 $db = $db::getInstance(); 3 $config=array( 4 'host'=>'127.0.0.1', 5 'user'=>'root', 6 'pwd'=>'root', 7 'dbname'=>'test' 8 ); 9 10 $res =$db->connect($config)->selectDb($config)->table('user')->field('id')->where('id =1')->select(); 11 // $db->selectDb($config); 12 $row = @mysql_fetch_assoc($res); 13 var_dump($row);
我的数据库配置:
1 mysql -uroot -p 2 **** 3 create database test; 4 use test; 5 create table user(id int(1) not null); 6 insert user(id) value(1);
url 访问展示
OK done!!!