demo
在开始之前,我们首先在数据库
中创建一个
数据表(这里以
mysql
数据库为例):
CREATE TABLE IF NOT EXISTS `think\_data`(
`id` int(8) unsigned NOT NULL AUTO\_INCREMENT,
`data` varchar(255) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
INSERT INTO `think\_data`(`id`,`data`) VALUES (1,'thinkphp'),
(2,'php'),
(3,'framework');
首先我们需要在应用的数据库配置文件 中添加数据库的连接信息如下:
application/database.php
return \[
//数据库类型
'type'
//服务器地址
'hostname'
//数据库名
'database'
//数据库用户名
'username'
//数据库密码
=> 'mysql',
=> '127.0.0.1',
=>'demo',
=>'root',
'password'
=> '',
//数据库连接端口
'hostport' =>'',
//数据库连接参数
'params' =>\[\],
//数据库编码默认采用utf8
'charset'
//数据库表前缀
=> 'utf8',
'prefix' => 'think\_',
//数据库调试模式
'debug' => true,
\];
接下来,我们修改下控制器方法,添加读取数据的代码:
<?php
namespace app\\index\\controller;
use think\\Controller; use think\\Db;
class Index extends Controller
{
public function index()
{
$data = Db::name('data')->find();
$this->assign('result', $data); return $this->fetch();
}
}
定义好控制器后,我们修改模板文件,添加数据输出标签如下:
<html>
<head>
<title></title>
</head>
<body>
{$result.id}--{$result.data}
</body>
</html>
模板标签的用法和
Smarty
字段的值。
data
我们访问会输出:
类似,就是用于输出数据的字段,这里就表示输出
表的 和
1--thinkphp
- 目 录
- 零、序言
- 概述
- 目前章节完成情况(
- 表示已经完成)
- 阅读须知
- ThinkPHP V5.0 官方权威QQ群
- 简介
- 官网下载
- Composer安装和更新
- Git下载和更新
- [ Github ]
- [ 码 云 ]
- [ Coding ]
- 目录结构
- 运行环境
- 入口文件
- 调试模式
- 控制器
- 视图
- 读取数据
- 总结
- 二、URL和路由
- URL访问
- 参数传入
- 隐藏index.php
- 定义路由
- 完整匹配
- 闭包定义
- 设置URL分隔符
- 路由参数
- 变量规则
- 路由分组
- 复杂路由
- 生成URL地址
- 总结
- 三、请求和响应
- 请求对象
- 传统方式调用
- 继承think\Controller
- 自动注入请求对象
- 动态绑定属性
- 使用助手函数
- 请求信息
- 获取请求变量
- 获取请求参数
- 获取URL信息
- 获取当前模块/控制器/操作信息
- 获取路由和调度信息
- 响应对象
- 自动输出
- 手动输出
- 页面跳转
- 页面重定向
- 总结
- 四、数据库
- 准备
- 数据库配置
- 原生查询
- 创建(create)
- 删除(delete)
- 切换数据库
- 参数绑定
- 查询构造器
- 链式操作
- 事务支持
- 五、查询语言
- 查询表达式
- 批量查询
- 快捷查询
- 视图查询
- 闭包查询
- 使用Query对象
- 获取数值
- 获取列数据
- 聚合查询
- 字符串查询
- 时间(日期)查询
- 分块查询
- 六、模型和关联
- (1)模型定义
- 模型定义
- 设置数据表
- 设置完整数据表:
- (2)基础操作
- 新增数据
- 批量新增
- 查询数据
- 数据列表
- 更新数据
- 删除数据
- (3)读取器和修改器
- 读取器
- 修改器
- (4)类型转换和自动完成
- 类型转换
- 自动时间戳
- 自动完成
- (5)查询范围
- 查询范围
- 全局查询范围
- (6)输入和验证
- 表单提交
- 表单验证
- 错误提示
- 自定义验证规则
- 控制器验证
- (7)关联
- 基本定义
- 一对一关联
- 关联定义
- 关联写入
- 关联查询
- 关联更新
- 关联删除
- 一对多关联
- 关联定义
- 关联新增
- 关联查询
- 关联更新
- 关联删除
- 多对多关联
- 关联定义
- 关联新增
- 关联删除
- 关联查询
- (8)模型输出
- 输出数组
- 隐藏属性
- 指定属性
- 追加属性
- 输出JSON
- 七、视图和模板
- 模板输出
- 分页输出
- 公共模板
- 模板定位
- 模板布局
- 标签定制
- 输出替换
- 渲染内容
- 助手函数
- 八、调试和日志
- 第一式:未雨绸缪——页面Trace
- 第二式:初见端倪——异常页面
- 第三式:拨云见日——断点调试
- 变量调试输出
- 变量调试并中断输出
- 控制台输出
- 第四式:欲穷千里——日志分析
- 第五式:运筹帷幄——远程调试
- 九、API开发
- API版本
- 异常处理
- RESTFul
- 请求测试
- Postman
- 请求伪装
- API调试
- 环境安装
- 浏览器设置
- 应用配置
- 远程调试
- 安全建议
- 十、命令行工具
- 查看指令
- 生成模块
- 生成文件
- 生成类库映射文件
- 生成路由缓存文件
- 生成数据表字段缓存文件
- 指令扩展示例
- 命令行调试
- 命令行颜色支持
- 调用命令
- 十一、扩展
- 函数扩展
- 类库扩展
- 驱动扩展
- Composer扩展
- 十二、杂项
- Session
- 初始化
- 读取
- 操作
- 助手函数
- 模板输出
- 驱动
- Session示例
- Cookie
- 初始化
- 读取Cookie
- 模板输出
- 操作
- 设置
- 清空
- 验证码
- 安装类库
- 验证码显示
- 验证码检测
- 验证码配置
- 改变字体大小和验证码长度
- 同时使用多个验证码
- 文件上传
- 控制器定义
- 上传文件验证
- 文件保存规则
- 多文件上传
- 后续文件操作
- 图像处理
- 安装扩展
- 示例代码
- 控制器定义
- 模板定义
- 示例演示
- 读取图片
- 图片裁剪
- 生成缩略图
- 图像翻转
- 图片旋转
- 添加水印
- 文字水印
- 图片保存
- 单元测试
- 安装扩展
- 运行测试
- 添加单元测试用例
- 定义单元测试
- 附录
- A、常见问题集
- 为什么5.0取消了很多常量?
- 为啥单字母函数去掉了?
- 数据库查询和模型怎么用?
- 关于配置参数的问题
- 怎么才能在控制器中正确的输出模板
- 没有创建模型类怎么查询?
- 原来3.2版本的模型的
- 方法应该如何使用?
- 5.0怎么没有编译缓存了?
- 为什么写入数据的时候不会自动去除数据库没有的字段?
- 为什么不能识别驼峰法命名的控制器
- 的类库定义可以带上后缀么?
- 怎么实现模板输出的特殊字符串替换?
- 5.0的fetch和display方法有什么区别?
- 为什么Session无法获取?
- 为什么无法接收表单数组类型数据?
- 为什么模型的查询返回的都是对象而不是数组
- 为什么 类没有了?
- 原来的模板标签怎么不能用了?
- 5.0模型的
- 方法如何过滤非数据表字段值?
- 为什么路由变量用 获取不到?
- 如何关闭未定义变量的错误提示?
- 如何获取当前的模块、控制器和操作名
- 如何让生成的URL地址带上index.php
- 模型类的
- 属性和
- 模型的save方法调用后怎么获取自增主键的值?
- B、3.2和5.0区别
- URL和路由
- 请求对象和响应对象
- 模块和控制器
- 数据库
- 3.2版本
- 5.0版本
- 模型
- 3.2版本
- 5.0版本
- 自动验证和自动完成
- 异常
- 调试和日志
- 常量
- 函数
- C、助手函数
- 加载和实例化
- 参数:
- 示例:
- 参数:
- 示例:
- 参数:
- 示例:
- 示例:
- 示例:
- 示例:
- 示例:
- 示例:
- 返回值:示例:
- 参数:
- 数据操作
- 参数:
- 示例:
- 示例:
- 示例:
- 示例:
- 示例:
- 示例:
- 参数:
- 示例:
- 示例:
- 示例:
- 示例:
- 参数:
- 参数:
- 参数:
- 参数:
- 参数:
- 示例:
- 示例:
- 示例:
- 示例:
- 示例:
