首页
社区
文档
日志
登入
注册
文 档
开始
目录结构
配置文件
常量
视图
控制器
文件上传
自动加载类文件
路由
图片验证码
函数
缓存
数据模型
基本操作
数据添加
数据删除
数据更新
数据查询
where条件
自动验证
数据分页
子查询
原生SQL语句的使用
数据缓存
连接Sqlite
内 文 索 引
> 框架数据模型是基于 PDO 驱动的,记得要开启PHP的PDO支持 基于数据模型的操作在使用【**数组传参**】时全部都是通过 参数绑定 来实现的 所以大家应尽量使用数组传参的方式,避免直接执行SQL语句带来的隐患 # 先看一个示例 **1.创建数据表** > !测试时注意修改配置文件的数据表前缀! DROP TABLE IF EXISTS `zphp_user`; CREATE TABLE `zphp_user`( `userid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(32) NOT NULL DEFAULT '', `password` VARCHAR(32) NOT NULL DEFAULT '' )ENGINE=InnoDB DEFAULT CHARSET=utf8; **2.在model目录下创建 user.class.php** > 因为继承了db所以直接使用 $this 来操作数据增删改查 <?php namespace m; use \z\db; class user extends db{ function adduser(){ $user['username'] = '用户名'; $user['password'] = md5('登陆密码'); $result = $this->add($user); if($result){ return 0; }else{ return '添加用户失败'; } } function edituser(){ $where['userid'] = I('userid'); if(!$where['userid']){ return '缺少参数:userid'; } $user['username'] = '修改用户名'; $user['password'] = md5('修改登陆密码'); $result = $this->where($where)->save($user); if($result){ return 0; }else{ return '修改用户失败'; } } } **3.在controller目录下创建 user.class.php** <?php namespace c; use \z\controller; class user extends controller{ static function add(){ $m = M('user'); $result = $m->adduser(); if($result){ parent::error($result); }else{ parent::success(); } } static function edit(){ $m = M('user'); $result = $m->edituser(); if($result){ parent::error($result); }else{ parent::success(); } } } **5.通过url访问一下控制器中的两个方法** /xxx.php?c=user&a=add /xxx.php?c=user&a=edit&userid=1 ## 数据库连接配置 **1.可在 config.php 配置文件中配置如下字段** 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'db1', 'DB_USER' => 'root', 'DB_PASS' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' => 'zphp_', //表名前缀 'DB_CHARSET' => 'utf8', //字符集 'DB_CACHEMOD' => 0 //缓存方式 **2.也可以在实例化时传入连接配置** $config = [ 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'db1', 'DB_USER' => 'root', 'DB_PASS' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' => 'zphp_', //表名前缀 'DB_CHARSET' => 'utf8', //字符集 'DB_CACHEMOD' => 0 //缓存方式 ]; $m = D('user',$config); **3.多数据库服务器读写分离的配置** DB_HOST 配置为数组,第一个为写服务器,其它是只读服务器 'DB_HOST' => ['127.0.0.1','127.0.0.2','127.0.0.3'], 'DB_NAME' => 'db1', // 可配置为数组,顺序对应 DB_HOST 'DB_USER' => 'root', // 可配置为数组,顺序对应 DB_HOST 'DB_PASS' => 'root', // 可配置为数组,顺序对应 DB_HOST 'DB_PORT' => '3306', // 可配置为数组,顺序对应 DB_HOST 'DB_CHARSET' => 'utf8', // 字符集 'DB_PREFIX' => 'col_', // 数据表前缀 ## 实例化数据模型 **1. D( ) 函数** D('user') 函数直接实例化数据模型,参数 user 是将要操作的数据表名(省略前缀,前缀可在配置文件自定义) user 参数可省略,后续操作时可以使用 table('user') 函数来指定 $m = D('user'); $m = D()->table('user'); //如果需要连接其它数据库可以传入数据库配置: $config = [ 'DB_HOST' => ['127.0.0.1','127.0.0.1'], 'DB_NAME' => 'db1', 'DB_USER' => 'root', 'DB_PASS' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' => 'zphp_', //表名前缀 'DB_CHARSET' => 'utf8', //字符集 'DB_CACHEMOD' => 0 //缓存方式 ]; $m = D('user',$config); **2. M( ) 函数** M('user')函数 作用是实例化用户的自定义模型 user.class.php user 对应用户模型的**文件名**以及**类名**和**数据表名** 用户自定义模型的存放目录是:应用目录/model/ 或者是 根目录下的 common/model/ 优先使用 应用目录下的模型文件,不存在时会到common目录下查找 如果都不存在 将直接实例化数据模型,也就是等同于D( )函数 $m = M('user'); // 指定某个应用下的模型: $m = M('user','admin'); //使用admin应用下的user模型 //传入数据库连接配置: $m = M('user',null,$config); ## 切换数据表 $m = D('user'); ...数据操作; $m->table('cart')... //切换到 cart 表进行其它数据操作 ## 设置表别名 在指定表名之后紧跟着使用 ->alias('name') 来指定该数据表的别名: $m = D(); $m->table('user')->alias('a'); $m = D('user')->alias('u'); ## 获取错误信息 $m = D('user'); ...数据操作 $err = $m->getError(); ## 获取最后执行的SQL语句 及 所绑定的参数 $m = D('user'); ...数据操作 $sql = $m->getSql(); //最后执行的sql语句 $args = $m->getArgs(); //最后执行的sql语句所绑定的参数 ## 连贯操作 数据模型的操作可以使用 -> 操作符依次调用多个方法,例如: $m = D('user'); $field = ['id','name','age']; $where = ['id >'=>0]; $user = $m->field($field)->where($where)->limit(20)->select(); ## 直接执行SQL语句 **1. 查询数据** $m = D(); $sql = "SELECT `username` FROM `zphp_user` WHERE `userid` > :userid"; $bind = [':userid'=>10]; //绑定参数 $user = $m->queryOne($sql,$bind); //只取一条数据 $list = $m->queryAll($sql,$bind); //取出所有数据 **2. 写入数据** 如果是插入数据将返回插入数据的主键值,没有主键时返回 true 如果是更新数据将返回受影响的数据行数 $m = D(); $result = $m->submit($sql,$bind); ## 获取所有数据表名 $m = D(); $tables = $m->getTables(); ## 获取表的所有字段 $m = D('user'); $fields = $m->getFields(); ## 直接使用PDO对象 $pdo = PDO($config) // 支持传入连接参数 $sql = 'SELECT * FROM `zphp_user`'; $sth = $pdo->query($sql); $list = $sth->fetchAll();