PHP:【ThinkPHP】=>数据库表达式:普通查询、表达式查询、快捷查询、区间查询、组合查询;原生mysql查询;事务操作 ;翻页功能
一.数据库表达式
- 表达式是 SQL 语句的条件
- 表达式不分大小写
- 表达式写在 where 里
表达式 | 含义 | 查询方法 |
---|---|---|
= | 等于 | |
<> | 不等于 | |
> | 大于 | |
>= | 大于等于 | |
< | 小于 | |
<= | 小于等于 | |
[NOT] LIKE | 模糊查询 | whereLike/whereNotLike |
[NOT] BETWEEN | (不在)区间查询 | whereBetween/whereNotBetween |
[NOT] IN | (不在)IN 查询 | whereIn/whereNotIn |
[NOT] NULL | 查询字段是否(不)是 NULL | whereNull/whereNotNull |
-
表达式
where方法在链式操作方法里面是最常用的方法,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的条件查询操作- |LIKE|模糊查询|whereLike/whereNotLike|
- |[NOT] LIKE|模糊查询|whereLike/whereNotLike|
- |LIKE|模糊查询|whereLike/whereNotLike|
总而言之,加上not的就是取反,不加not的就是正式
- 聚合查询
- 聚合方法查询后:没有数据,返回 0,聚合查询可以配合查询条件
方法 | 功能 |
---|---|
count | 统计数量,参数是要统计的字段名(可选) |
max | 获取最大值,参数是要统计的字段名(必须) |
min | 获取最小值,参数是要统计的字段名(必须) |
avg | 获取平均值,参数是要统计的字段名(必须) |
sum | 获取总数,参数是要统计的字段名(必须) |
-
|count|统计数量,参数是要统计的字段名(可选)|
-
|max|获取最大值,参数是要统计的字段名(必须)|
-
|avg|获取平均值,参数是要统计的字段名(必须)|
-
|sum|获取总数,参数是要统计的字段名(必须)|
-
join* 用于对查询的 join 支持 字符串和数组
如果用join多表查询,不限制两个表的id 或者一个表的id,也就是全字段查询,则id会重复,所以下面选择性的查询另外一个表的字段,id则不会重复
二.原生 MySQL
-
query 方法:查询
-
execute 方法:添加和修改
-
getLastsql 调试执行的 SQL 语句
-
fetchSql 调试执行的 SQL 语句,而不执行
-
isEmpty 是否为空
-
toArray 转换为数组
三.thinkphp 事务操作
-
InnoDB引擎支持事务处理,MyISAM不支持事务处理
-
这两种引擎在表里设置
-
ThinkPHP3.0-5.1 事务开启
其中时间设置错误,会自动回滚到原点,并不会插入数据
- ThinkPHP6.0 事务开启
- transaction 方法操作数据库事务,当闭包中的代码发生异常会自动回滚
Db::transaction 采用闭包的方式进行事物回滚,只要里面出错就直接回滚到原点
四.模版分页
- paginate 内置了分页实现,要给数据添加分页输出功能变得非常简单
- raw 不使用(默认)转义
- render 获取分页显示
- total 获取总数量
五.完善博客内容,分类,热门文章,搜索,分页
controller 代码块
public function index()
{
//查询文章和导航相对应绑定的值
$id = Request::get('id',0);
//查询搜索值
$t = Request::get('t',"");
//查询翻页值
$p = Request::get('page',1);
if (isset($id) && !empty($id)) {
//查询分类文章
$boke = Db::table('boke a')
->field('a.*,c.name')
->join(['cat' => 'c'],'a.cat = c.id')
->where("cat",$id)
->page($p,5)
->order('date DESC')
->select();
}else if (isset($t) && !empty($t)){
//查询搜索文章
$boke = Db::table('boke a')
->field('a.*,c.name')
->join(['cat' => 'c'],'a.cat = c.id')
->where('title',"like","%$t%")
->page($p,5)
->order('date DESC')
->select();
}else {
//查询全部文章
$boke = Db::table('boke a')
->field('a.*,c.name')
->join(['cat' => 'c'],'a.cat = c.id')
->page($p,5)
->order('date DESC')
->select();
}
//分页模板
$page = Db::table('boke')
->where('status',1)
->order('date DESC')
->paginate(5);
//查询导航字段
$cat = Db::table('cat')
->where('status',1)
->order('sort DESC')
->select();
//查询热门文章
$TopArticle = Db::table('boke')
->where('status',1)
->order('num DESC')
->limit(3)
->select();
View::assign([
'boke' => $boke,
'cat' => $cat,
't'=>$t,
'TopArticle' => $TopArticle,
'page' => $page,
]);
return View::fetch();
}
HTML 代码块
<body class="home blog custom-background custom-font-enabled single-author">
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="JiaJieChen个人博客" rel="home">JiaJieChen个人博客</a>
</h1>
<h2 class="site-description">同学们大家好。</h2>
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/index.html">首页</a>
</li>
{foreach $cat as $cat_v}
<li>
<a href="?id={$cat_v['id']}">{$cat_v['name']}</a>
</li>
{/foreach}
</ul>
</nav>
</header>
<div class="Puax" >
<ul>
<li class="startX" ><a href=" asc">升序</a></li>
<li class="endX" style="display: none;"><a href=" desc">降序</a></li>
</ul>
</div>
<div id="main" class="wrapper">
<div id="primary" class="site-content">
<div id="content" role="main">
{foreach($boke as $boke_v)}
<div id="content" role="main">
<article>
<header class="entry-header">
<h1 class="entry-title">
<a href="/details.html" title="构建Nginx和PHP镜像" rel="bookmark">{$boke_v['title']}</a>
</h1>
</header>
<div class="entry-content">{$boke_v['content']}</div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
<time class="entry-date" datetime="2020-10-02">{$boke_v['date']}</time> </a
>。 属于 <a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">{$boke_v['name']}</a>分类
</footer>
</article>
</div>
{/foreach}
</div>
<div class="page">
<nav>
<ul class="pagination">
{$page|raw}
</ul>
</nav>
</div>
</div>
<div id="secondary" class="widget-area" role="complementary">
<aside id="search-2" class="widget widget_search">
<form role="search" id="searchform" action="" method="POST">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="{$t}" type="text" class="no-border" name="keywords" id="t" />
<input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
</div>
</form>
<script type="text/javascript">
$(function () {
$(" searchsubmit").click(function () {
if ($(" t").val() != "") {
location.href = "/index.html?t=" + $(" t").val();
}
return false;
});
});
</script>
</aside>
<aside id="recent-posts-2" class="widget widget_recent_entries">
<h3 class="widget-title">热门文章</h3>
<ul>
{foreach $TopArticle as $TopArticle_k => $TopArticle_v }
<li>
<font style="color: 7a7a7a">{$TopArticle_k+1}</font>
<a href="/details.html?id=20" title="{$TopArticle_v['title']}">{$TopArticle_v['title']}</a>
</li>
{/foreach}
</ul>
</aside>
</div>
</div>
<footer id="colophon" role="contentinfo">
<div class="site-info">
<span>友情链接:</span>
<a href="https://www.php.cn" target="_blank">PHP中文网</a>
</div>
</footer>
<footer role="contentinfo" style="margin-top: 0">
<div class="site-info" style="text-align: center">
<span>
<a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
</span>
</div>
</footer>
</div>
<script>
$('.startX').click(function () {
$('.startX').css('display','none');
$('.endX').css('display','block');
})
$('.endX').click(function () {
$('.endX').css('display','none');
$('.startX').css('display','block');
})
</script>
</body>