<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>数据库操作 &#8211; 个人随笔</title>
	<atom:link href="/label/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sat, 09 Jun 2018 01:08:11 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>数据库操作 &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>TP5.0（二）数据库操作、模型 CURD 操作、常用函数、时间戳自动维护、DB 构造器操作数据库、后台登录、后台退出、登录防翻墙、登录验证</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/7499.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/7499.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 09 Jun 2018 00:43:29 +0000</pubDate>
				<category><![CDATA[TP5.0]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[DB 构造器操作数据库]]></category>
		<category><![CDATA[后台登录]]></category>
		<category><![CDATA[后台退出]]></category>
		<category><![CDATA[常用函数]]></category>
		<category><![CDATA[数据库操作]]></category>
		<category><![CDATA[时间戳自动维护]]></category>
		<category><![CDATA[模型 CURD 操作]]></category>
		<category><![CDATA[登录防翻墙]]></category>
		<category><![CDATA[登录验证]]></category>
		<guid isPermaLink="false">/?p=7499</guid>

					<description><![CDATA[TP5第二天 十五、数据库操作 在TP5操作数据库常用有两种方式： 通过Db构造器 如：Db::table(&#038; [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>TP5第二天</h1>
<h1>十五、数据库操作</h1>
<p>在TP5操作数据库常用有两种方式：</p>
<ul>
<li>通过Db构造器</li>
</ul>
<p>如：Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;status&#8217;,1)-&gt;select(); // #带数据表前缀</p>
<p>如：Db::name(&#8216;user&#8217;)-&gt;where(&#8216;status&#8217;,1)-&gt;select(); #不带表前缀</p>
<ul>
<li>通过模型类</li>
</ul>
<p>如：取出主键为1的数据</p>
<p>$user = User::get(1);</p>
<p>首先配置数据库的连接信息</p>
<h2>创建数据库数据表，配置数据库信息</h2>
<p>在application/database.php文件中添加下面的配置参数：</p>
<p><img fetchpriority="high" decoding="async" width="871" height="556" class="wp-image-7500" src="/wp-content/uploads/2018/06/word-image-106.png" srcset="/wp-content/uploads/2018/06/word-image-106.png 871w, /wp-content/uploads/2018/06/word-image-106-300x192.png 300w, /wp-content/uploads/2018/06/word-image-106-768x490.png 768w" sizes="(max-width: 871px) 100vw, 871px" /></p>
<p>同时创建好数据库和数据表：</p>
<ol>
<li>创建数据库article:</li>
</ol>
<p>create database article;</p>
<p>2、创建数据表tp_user(用户表)、tp_category（分类表）、tp_article（文章表）</p>
<p>tp_user表结构：</p>
<p>create table tp_user(</p>
<p>user_id int not null auto_increment,</p>
<p>username varchar(30) not null default &#8221; comment &#8216;用户名&#8217;,</p>
<p>password char(32) not null default &#8221; comment &#8216;密码&#8217;,</p>
<p>primary key(user_id)</p>
<p>)engine = Innodb default charset = utf8;</p>
<p>tp_category表结构：</p>
<p>create table tp_category(</p>
<p>cat_id smallint not null auto_increment,</p>
<p>cat_name varchar(30) not null default &#8221; comment &#8216;分类名称&#8217;,</p>
<p>pid smallint not null default 0 comment &#8216;父分类的id&#8217;,</p>
<p>create_time int not null default 0 comment &#8216;创建时间&#8217;,</p>
<p>update_time int not null default 0 comment &#8216;更新时间&#8217;,</p>
<p>primary key(cat_id)</p>
<p>)engine = Innodb default charset = utf8;</p>
<p>tp_article表结构：</p>
<p>create table tp_article(</p>
<p>article_id smallint not null auto_increment,</p>
<p>title varchar(30) not null default &#8221; comment &#8216;文章标题&#8217;,</p>
<p>content text comment &#8216;文章内容&#8217;,</p>
<p>cat_id smallint not null default 0 comment &#8216;文章所属分类&#8217;,</p>
<p>ori_img varchar(150) not null default &#8221; comment &#8216;原图的路径&#8217;,</p>
<p>thumb_img varchar(150) not null default &#8221; comment &#8216;缩略图的路径&#8217;,</p>
<p>create_time int not null default 0 comment &#8216;创建时间&#8217;,</p>
<p>update_time int not null default 0 comment &#8216;更新时间&#8217;,</p>
<p>primary key(article_id)</p>
<p>)engine = Innodb default charset = utf8;</p>
<p>注：表名加前缀tp_,用于区分多个项目。</p>
<ol>
<li>测试数据库是否连接成功，可以向表添加几条数据，进行查询</li>
</ol>
<p><img decoding="async" width="444" height="79" class="wp-image-7501" src="/wp-content/uploads/2018/06/word-image-107.png" srcset="/wp-content/uploads/2018/06/word-image-107.png 444w, /wp-content/uploads/2018/06/word-image-107-300x53.png 300w" sizes="(max-width: 444px) 100vw, 444px" /></p>
<p><img decoding="async" width="772" height="250" class="wp-image-7502" src="/wp-content/uploads/2018/06/word-image-108.png" srcset="/wp-content/uploads/2018/06/word-image-108.png 772w, /wp-content/uploads/2018/06/word-image-108-300x97.png 300w, /wp-content/uploads/2018/06/word-image-108-768x249.png 768w" sizes="(max-width: 772px) 100vw, 772px" /></p>
<p>结果：</p>
<p><img loading="lazy" decoding="async" width="266" height="239" class="wp-image-7503" src="/wp-content/uploads/2018/06/word-image-109.png" /></p>
<p>说明连接成功。</p>
<h2>模型</h2>
<h3>模型认识</h3>
<p>M:Model模型</p>
<p>作用：主要对数据库进行一些增删改查的操作。</p>
<h3>模型的定义</h3>
<p>一般而言，一个表对应一个模型，如果只是对表进行最基本的增删改查，不建模型也是可以操作表数据的，但是如果数据逻辑比较复杂，我们可以把这些数据逻辑定义在模型中，为了和业务逻辑分开，代码结构也比较清晰，也方便后期维护。</p>
<p>个人建议最好的做法就是以下两点：</p>
<p>①业务逻辑写在控制器中</p>
<p>②数据逻辑写在模型中</p>
<p>如有一个文章分类表，名为tp_category，此表对应的模型类名和模型文件定义如下：</p>
<p>模型类名： Category 注：驼峰法，除开表前缀的数据表名称。</p>
<p>模型类文件：Category.php 表名+.php</p>
<p>模型类文件所在位置：模块名/model/Category.php</p>
<p>给表tp_category建立模型文件如下：</p>
<p><img loading="lazy" decoding="async" width="692" height="218" class="wp-image-7504" src="/wp-content/uploads/2018/06/word-image-110.png" srcset="/wp-content/uploads/2018/06/word-image-110.png 692w, /wp-content/uploads/2018/06/word-image-110-300x95.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></p>
<p>其中模型中定义的属性pk为表的主键名称，若不指定则框架会自动识别。</p>
<p>有关表名的注意事项：</p>
<p>手册位置： 模型-&gt;定义</p>
<p><img loading="lazy" decoding="async" width="914" height="461" class="wp-image-7505" src="/wp-content/uploads/2018/06/word-image-111.png" srcset="/wp-content/uploads/2018/06/word-image-111.png 914w, /wp-content/uploads/2018/06/word-image-111-300x151.png 300w, /wp-content/uploads/2018/06/word-image-111-768x387.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></p>
<h3>（3）实例化模型</h3>
<p>方式一：在控制器中实例化模型首先引入其模型类所在的命名空间，如引入上面的Category</p>
<p>模型：</p>
<p>use app\admin\model\Category;</p>
<p>然后实例化模型：</p>
<p>// 静态调用</p>
<p>$data = Category::get(1); //获取主键值为1的数据</p>
<p>// 实例化模型</p>
<p>$cate= new Category();</p>
<p>$data = $cate-&gt;get(1);</p>
<p><img loading="lazy" decoding="async" width="503" height="239" class="wp-image-7506" src="/wp-content/uploads/2018/06/word-image-112.png" srcset="/wp-content/uploads/2018/06/word-image-112.png 503w, /wp-content/uploads/2018/06/word-image-112-300x143.png 300w" sizes="(max-width: 503px) 100vw, 503px" /></p>
<p>其中打印$dataObj是一个当前数据的对象：</p>
<p><img loading="lazy" decoding="async" width="479" height="584" class="wp-image-7507" src="/wp-content/uploads/2018/06/word-image-113.png" srcset="/wp-content/uploads/2018/06/word-image-113.png 479w, /wp-content/uploads/2018/06/word-image-113-246x300.png 246w" sizes="(max-width: 479px) 100vw, 479px" /></p>
<p>或者：</p>
<p><img loading="lazy" decoding="async" width="594" height="260" class="wp-image-7508" src="/wp-content/uploads/2018/06/word-image-114.png" srcset="/wp-content/uploads/2018/06/word-image-114.png 594w, /wp-content/uploads/2018/06/word-image-114-300x131.png 300w" sizes="(max-width: 594px) 100vw, 594px" /></p>
<p>方式二：或者直接可以使用助手函数model：</p>
<p>$cate = model(&#8216;Category&#8217;);</p>
<p>$data = $cate-&gt;get(1);</p>
<p><img loading="lazy" decoding="async" width="852" height="331" class="wp-image-7509" src="/wp-content/uploads/2018/06/word-image-115.png" srcset="/wp-content/uploads/2018/06/word-image-115.png 852w, /wp-content/uploads/2018/06/word-image-115-300x117.png 300w, /wp-content/uploads/2018/06/word-image-115-768x298.png 768w" sizes="(max-width: 852px) 100vw, 852px" /></p>
<h1>十六、模型CURD操作</h1>
<p>C-create：新增数据</p>
<p>U-update：更新数据</p>
<p>R-read：查询数据</p>
<p>D-delete：删除数据</p>
<h2>新增数据</h2>
<p>手册位置：模型-&gt;新增</p>
<h3>（1）添加一条数据</h3>
<p>$model-&gt;save($data);</p>
<p>参数：$data为一维数组，其中[‘字段名’=&gt;’数据’]</p>
<p>返回：成功返回写入的记录数</p>
<p><img loading="lazy" decoding="async" width="678" height="198" class="wp-image-7510" src="/wp-content/uploads/2018/06/word-image-116.png" srcset="/wp-content/uploads/2018/06/word-image-116.png 678w, /wp-content/uploads/2018/06/word-image-116-300x88.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<h3>获取自增后的主键值</h3>
<p>$model-&gt;save($data);</p>
<p>echo $model-&gt;主键字段名;</p>
<p><img loading="lazy" decoding="async" width="598" height="240" class="wp-image-7511" src="/wp-content/uploads/2018/06/word-image-117.png" srcset="/wp-content/uploads/2018/06/word-image-117.png 598w, /wp-content/uploads/2018/06/word-image-117-300x120.png 300w" sizes="(max-width: 598px) 100vw, 598px" /></p>
<p>数据表数据如下：</p>
<p><img loading="lazy" decoding="async" width="541" height="64" class="wp-image-7512" src="/wp-content/uploads/2018/06/word-image-118.png" srcset="/wp-content/uploads/2018/06/word-image-118.png 541w, /wp-content/uploads/2018/06/word-image-118-300x35.png 300w" sizes="(max-width: 541px) 100vw, 541px" /></p>
<h3>（3）过滤非数据表字段</h3>
<ul>
<li>只允许数据表的字段写入</li>
</ul>
<p>$model-&gt;allowField(true)-&gt;save($data) ;</p>
<ul>
<li>只允许name和email字段写入</li>
</ul>
<p>$model-&gt;allowField([‘name’,’email’])-&gt;save($data) ;</p>
<p>代码：</p>
<p><img loading="lazy" decoding="async" width="609" height="138" class="wp-image-7513" src="/wp-content/uploads/2018/06/word-image-119.png" srcset="/wp-content/uploads/2018/06/word-image-119.png 609w, /wp-content/uploads/2018/06/word-image-119-300x68.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></p>
<h3>（4）添加多条数据</h3>
<ul>
<li>$model-&gt;saveAll();</li>
</ul>
<p><img loading="lazy" decoding="async" width="665" height="272" class="wp-image-7514" src="/wp-content/uploads/2018/06/word-image-120.png" srcset="/wp-content/uploads/2018/06/word-image-120.png 665w, /wp-content/uploads/2018/06/word-image-120-300x123.png 300w" sizes="(max-width: 665px) 100vw, 665px" /></p>
<p>成功：返回数组对象集合。</p>
<p><img loading="lazy" decoding="async" width="461" height="207" class="wp-image-7515" src="/wp-content/uploads/2018/06/word-image-121.png" srcset="/wp-content/uploads/2018/06/word-image-121.png 461w, /wp-content/uploads/2018/06/word-image-121-300x135.png 300w" sizes="(max-width: 461px) 100vw, 461px" /></p>
<p>注：其中每条数据都是作为当前模型类的对象。</p>
<p>数据表如下：<br />
<img loading="lazy" decoding="async" width="494" height="55" class="wp-image-7516" src="/wp-content/uploads/2018/06/word-image-122.png" srcset="/wp-content/uploads/2018/06/word-image-122.png 494w, /wp-content/uploads/2018/06/word-image-122-300x33.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></p>
<h2>更新数据-U</h2>
<p>手册位置：模型&#8211;&gt;更新</p>
<h3>更新方式一</h3>
<ul>
<li>$model-&gt;save($data,更新条件)</li>
<li>$model-&gt;isUpdate(true)-&gt;save($data)</li>
</ul>
<p>可以通过isUpdate方法指定save为执行更新操作，其中$data中必须带更新的主键值</p>
<ul>
<li>若需要过滤非数据表的字段数据，使用：</li>
</ul>
<p>$model-&gt;-&gt;isUpdate(true)-&gt;allowField(true)-&gt;save($data)</p>
<p><img loading="lazy" decoding="async" width="633" height="300" class="wp-image-7517" src="/wp-content/uploads/2018/06/word-image-123.png" srcset="/wp-content/uploads/2018/06/word-image-123.png 633w, /wp-content/uploads/2018/06/word-image-123-300x142.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></p>
<p><img loading="lazy" decoding="async" width="651" height="64" class="wp-image-7518" src="/wp-content/uploads/2018/06/word-image-124.png" srcset="/wp-content/uploads/2018/06/word-image-124.png 651w, /wp-content/uploads/2018/06/word-image-124-300x29.png 300w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<h3>（2）更新方式二</h3>
<ul>
<li>$model-&gt;update($data)</li>
</ul>
<p>参数$data为一维数组，键名为表字段名，其中更新必须指定更新条件，否则更新失败。</p>
<p>成功返回当前数据对象。</p>
<p><img loading="lazy" decoding="async" width="571" height="193" class="wp-image-7519" src="/wp-content/uploads/2018/06/word-image-125.png" srcset="/wp-content/uploads/2018/06/word-image-125.png 571w, /wp-content/uploads/2018/06/word-image-125-300x101.png 300w" sizes="(max-width: 571px) 100vw, 571px" /></p>
<p><img loading="lazy" decoding="async" width="471" height="26" class="wp-image-7520" src="/wp-content/uploads/2018/06/word-image-126.png" srcset="/wp-content/uploads/2018/06/word-image-126.png 471w, /wp-content/uploads/2018/06/word-image-126-300x17.png 300w" sizes="(max-width: 471px) 100vw, 471px" /></p>
<h2>删除数据-D</h2>
<h3>（1）调用静态方法删除一条数据</h3>
<p>模型类名::destroy(1); 如：User::destroy(1) 删除主键为1的记录</p>
<h3>（2）调用静态方法批量删除多个数据</h3>
<p>模型类名::destroy(‘1,2,3’); 删除主键为1,2,3的记录</p>
<p>或</p>
<p>模型类名::destroy([1,2,3]);</p>
<p>代码如下：</p>
<p><img loading="lazy" decoding="async" width="627" height="170" class="wp-image-7521" src="/wp-content/uploads/2018/06/word-image-127.png" srcset="/wp-content/uploads/2018/06/word-image-127.png 627w, /wp-content/uploads/2018/06/word-image-127-300x81.png 300w" sizes="(max-width: 627px) 100vw, 627px" /></p>
<h2>查询数据-R</h2>
<h3>（1）根据主键值获取记录一条记录</h3>
<p>$dataObj = 模型类名::get(主键值)</p>
<p>$dataObj = 模型类名::find(主键值)</p>
<p>成功返回当前数据的对象。</p>
<p><img loading="lazy" decoding="async" width="647" height="140" class="wp-image-7522" src="/wp-content/uploads/2018/06/word-image-128.png" srcset="/wp-content/uploads/2018/06/word-image-128.png 647w, /wp-content/uploads/2018/06/word-image-128-300x65.png 300w" sizes="(max-width: 647px) 100vw, 647px" /></p>
<h3>（2）根据主键值获取多条记录</h3>
<p>$dataObj= 模型类名::all(‘1,2,3’); //获取主键值为1,2,3的记录</p>
<p>或</p>
<p>$dataObj= 模型类名::all([1,2,3]); //获取主键值为1,2,3的记录</p>
<p>$dataObj= 模型类名::select(); //获取表中的所有数据</p>
<p>或</p>
<p>$dataObj= 模型类名::all();</p>
<p>all和select都是返回当前查询数组的数据对象集合。</p>
<p><img loading="lazy" decoding="async" width="596" height="223" class="wp-image-7523" src="/wp-content/uploads/2018/06/word-image-129.png" srcset="/wp-content/uploads/2018/06/word-image-129.png 596w, /wp-content/uploads/2018/06/word-image-129-300x112.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></p>
<h2>连贯操作</h2>
<p>手册位置：数据库&#8211;&gt;查询构造器&#8211;&gt;链式操作</p>
<p>注： 模型的链式操作方法和Db构造器链式操作的方法都通用；</p>
<p>TP5常用的模型连贯操作方法如下：</p>
<p>方法说明：</p>
<ul>
<li>field(“field1,field2&#8230;”)：查询指定的字段field1和field2,多个用逗号隔开</li>
<li>alias(‘数据表别名’)：给当前数据表设置别名,join联表时用的多</li>
<li>where(查询条件)：查询条件可以为表达式查询、数组查询、字符串查询。</li>
<li>order(“field desc”)：把查询的到结果集进行字段field降序（desc）或升序(asc)。</li>
<li>group(“field”): 把查询的到结果集进行字段field分组。</li>
<li>limit(offset,length): 获取结果集指定条数的数据， offset为起始位置，length为获取记录的条数。</li>
<li>join()：与其他表进行关联查询</li>
</ul>
<p>注意：</p>
<p>以上的连贯操作方法都是返回当前模型的对象，即方法底层都是返回当前模型对象即return $this,所以他们之间的调用顺序不用按照原生的sql顺序来调用，但如果是查询数据，查询语句的最末端一定要确保是select或者是find方法。</p>
<p>在原生的sql语句中一定要按照先后顺序调用：</p>
<p>原生sql语句执行的先后顺序： join==&gt;where ==&gt; group ==&gt; having==&gt;order==&gt;limit</p>
<p>在tp5中以上的连贯操作都不需要按照顺序。</p>
<h3>（1）where表达式查询条件</h3>
<p><img loading="lazy" decoding="async" width="712" height="587" class="wp-image-7524" src="/wp-content/uploads/2018/06/word-image-130.png" srcset="/wp-content/uploads/2018/06/word-image-130.png 712w, /wp-content/uploads/2018/06/word-image-130-300x247.png 300w" sizes="(max-width: 712px) 100vw, 712px" /></p>
<p>代码如下：</p>
<p>例1：</p>
<p><img loading="lazy" decoding="async" width="798" height="189" class="wp-image-7525" src="/wp-content/uploads/2018/06/word-image-131.png" srcset="/wp-content/uploads/2018/06/word-image-131.png 798w, /wp-content/uploads/2018/06/word-image-131-300x71.png 300w, /wp-content/uploads/2018/06/word-image-131-768x182.png 768w" sizes="(max-width: 798px) 100vw, 798px" /></p>
<p>获取生成组装的sql语句： buildSql()</p>
<p><img loading="lazy" decoding="async" width="1020" height="344" class="wp-image-7526" src="/wp-content/uploads/2018/06/word-image-132.png" srcset="/wp-content/uploads/2018/06/word-image-132.png 1020w, /wp-content/uploads/2018/06/word-image-132-300x101.png 300w, /wp-content/uploads/2018/06/word-image-132-768x259.png 768w" sizes="(max-width: 1020px) 100vw, 1020px" /></p>
<p>可见，多个where连续调用，默认是and连接符。 如果想使用or,可以使用方法whereOr()</p>
<p><img loading="lazy" decoding="async" width="907" height="234" class="wp-image-7527" src="/wp-content/uploads/2018/06/word-image-133.png" srcset="/wp-content/uploads/2018/06/word-image-133.png 907w, /wp-content/uploads/2018/06/word-image-133-300x77.png 300w, /wp-content/uploads/2018/06/word-image-133-768x198.png 768w" sizes="(max-width: 907px) 100vw, 907px" /></p>
<h3>（2）where数组查询条件</h3>
<p>完整语法：</p>
<p>$where = [</p>
<p>‘字段名1’=&gt; [表达式，‘值’]</p>
<p>‘字段名2’=&gt; [表达式，‘值’]</p>
<p>]</p>
<p>如果是等值（=）查询，可以不用指定表达式，直接写值即可</p>
<p>$where = [</p>
<p>‘字段名’ =&gt; ‘值’</p>
<p>]</p>
<p>//默认多字段查询，是and链接。</p>
<p>例1：</p>
<p><img loading="lazy" decoding="async" width="817" height="159" class="wp-image-7528" src="/wp-content/uploads/2018/06/word-image-134.png" srcset="/wp-content/uploads/2018/06/word-image-134.png 817w, /wp-content/uploads/2018/06/word-image-134-300x58.png 300w, /wp-content/uploads/2018/06/word-image-134-768x149.png 768w" sizes="(max-width: 817px) 100vw, 817px" /></p>
<h3>（3）where字符串查询条件</h3>
<p>where(字符串条件)</p>
<p><img loading="lazy" decoding="async" width="764" height="188" class="wp-image-7529" src="/wp-content/uploads/2018/06/word-image-135.png" srcset="/wp-content/uploads/2018/06/word-image-135.png 764w, /wp-content/uploads/2018/06/word-image-135-300x74.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></p>
<p>注：只能是类名::才可以调用方法，如果是对象调用，需要实例化对象，通过对象-&gt;去调用：</p>
<p><img loading="lazy" decoding="async" width="718" height="94" class="wp-image-7530" src="/wp-content/uploads/2018/06/word-image-136.png" srcset="/wp-content/uploads/2018/06/word-image-136.png 718w, /wp-content/uploads/2018/06/word-image-136-300x39.png 300w" sizes="(max-width: 718px) 100vw, 718px" /></p>
<h3>其中连贯操作方法</h3>
<ul>
<li>field(“field1,field2&#8230;”)：查询指定的字段field1和field2,多个用逗号隔开</li>
<li>alias(‘数据表别名’)：给当前数据表设置别名,join联表时用的多</li>
<li>where(查询条件)：查询条件可以为表达式查询、数组查询、字符串查询。</li>
<li>order(“field desc”)：把查询的到结果集进行字段field降序（desc）或升序(asc)。</li>
<li>group(“field”): 把查询的到结果集进行字段field分组。</li>
<li>limit(offset,length): 获取结果集指定条数的数据， offset为起始位置，length为获取记录的条数。</li>
<li>join()：与其他表进行关联查询</li>
</ul>
<p>注意：</p>
<p>以上的连贯操作方法都是返回当前模型的对象，即方法底层都是返回当前模型对象即return $this,所以他们之间的调用顺序不用按照原生的sql顺序来调用，但如果是查询数据，查询语句的最末端一定要确保是select或者是find方法。</p>
<p>例1：</p>
<p><img loading="lazy" decoding="async" width="989" height="116" class="wp-image-7531" src="/wp-content/uploads/2018/06/word-image-137.png" srcset="/wp-content/uploads/2018/06/word-image-137.png 989w, /wp-content/uploads/2018/06/word-image-137-300x35.png 300w, /wp-content/uploads/2018/06/word-image-137-768x90.png 768w" sizes="(max-width: 989px) 100vw, 989px" /></p>
<p>结果:</p>
<p><img loading="lazy" decoding="async" width="309" height="84" class="wp-image-7532" src="/wp-content/uploads/2018/06/word-image-138.png" srcset="/wp-content/uploads/2018/06/word-image-138.png 309w, /wp-content/uploads/2018/06/word-image-138-300x82.png 300w" sizes="(max-width: 309px) 100vw, 309px" /></p>
<p>注：通过模型数据对象-&gt;toArray()；可以转化为关联数组，看起来更加直观。</p>
<p>例2：</p>
<p><img loading="lazy" decoding="async" width="901" height="109" class="wp-image-7533" src="/wp-content/uploads/2018/06/word-image-139.png" srcset="/wp-content/uploads/2018/06/word-image-139.png 901w, /wp-content/uploads/2018/06/word-image-139-300x36.png 300w, /wp-content/uploads/2018/06/word-image-139-768x93.png 768w" sizes="(max-width: 901px) 100vw, 901px" /></p>
<p>例3：</p>
<p><img loading="lazy" decoding="async" width="925" height="105" class="wp-image-7534" src="/wp-content/uploads/2018/06/word-image-140.png" srcset="/wp-content/uploads/2018/06/word-image-140.png 925w, /wp-content/uploads/2018/06/word-image-140-300x34.png 300w, /wp-content/uploads/2018/06/word-image-140-768x87.png 768w" sizes="(max-width: 925px) 100vw, 925px" /></p>
<p>结果：</p>
<p><img loading="lazy" decoding="async" width="505" height="509" class="wp-image-7535" src="/wp-content/uploads/2018/06/word-image-141.png" srcset="/wp-content/uploads/2018/06/word-image-141.png 505w, /wp-content/uploads/2018/06/word-image-141-150x150.png 150w, /wp-content/uploads/2018/06/word-image-141-298x300.png 298w" sizes="(max-width: 505px) 100vw, 505px" /></p>
<p>默认select方法返回数组对象集合，只有取出具体的数据对象才可以调用toArray()转化为关联数组，如何把select方法的返回结果直接变为关联数组？</p>
<p>解决办法：把applciation/database.php文件的以下配置返回结果设置为think\Collection</p>
<p><img loading="lazy" decoding="async" width="747" height="187" class="wp-image-7536" src="/wp-content/uploads/2018/06/word-image-142.png" srcset="/wp-content/uploads/2018/06/word-image-142.png 747w, /wp-content/uploads/2018/06/word-image-142-300x75.png 300w" sizes="(max-width: 747px) 100vw, 747px" /></p>
<p>这样就可以使用select调用toAarray()返回关联数组：</p>
<p><img loading="lazy" decoding="async" width="1088" height="144" class="wp-image-7537" src="/wp-content/uploads/2018/06/word-image-143.png" srcset="/wp-content/uploads/2018/06/word-image-143.png 1088w, /wp-content/uploads/2018/06/word-image-143-300x40.png 300w, /wp-content/uploads/2018/06/word-image-143-768x102.png 768w, /wp-content/uploads/2018/06/word-image-143-1024x136.png 1024w" sizes="(max-width: 1088px) 100vw, 1088px" /></p>
<p><img loading="lazy" decoding="async" width="402" height="189" class="wp-image-7538" src="/wp-content/uploads/2018/06/word-image-144.png" srcset="/wp-content/uploads/2018/06/word-image-144.png 402w, /wp-content/uploads/2018/06/word-image-144-300x141.png 300w" sizes="(max-width: 402px) 100vw, 402px" /></p>
<p>例4、join联表</p>
<ol>
<li>联表查询出分类的所属父分类：</li>
</ol>
<p><img loading="lazy" decoding="async" width="1046" height="462" class="wp-image-7539" src="/wp-content/uploads/2018/06/word-image-145.png" srcset="/wp-content/uploads/2018/06/word-image-145.png 1046w, /wp-content/uploads/2018/06/word-image-145-300x133.png 300w, /wp-content/uploads/2018/06/word-image-145-768x339.png 768w, /wp-content/uploads/2018/06/word-image-145-1024x452.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<p>使用模型的join方法来实现：</p>
<p>手册位置：数据库&#8211;&gt;查询构造器&#8211;&gt;链式操作&#8211;&gt;join</p>
<p>语法： <img loading="lazy" decoding="async" width="674" height="55" class="wp-image-7540" src="/wp-content/uploads/2018/06/word-image-146.png" srcset="/wp-content/uploads/2018/06/word-image-146.png 674w, /wp-content/uploads/2018/06/word-image-146-300x24.png 300w" sizes="(max-width: 674px) 100vw, 674px" /></p>
<p><img loading="lazy" decoding="async" width="866" height="288" class="wp-image-7541" src="/wp-content/uploads/2018/06/word-image-147.png" srcset="/wp-content/uploads/2018/06/word-image-147.png 866w, /wp-content/uploads/2018/06/word-image-147-300x100.png 300w, /wp-content/uploads/2018/06/word-image-147-768x255.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></p>
<p>结果：</p>
<p><img loading="lazy" decoding="async" width="492" height="409" class="wp-image-7542" src="/wp-content/uploads/2018/06/word-image-148.png" srcset="/wp-content/uploads/2018/06/word-image-148.png 492w, /wp-content/uploads/2018/06/word-image-148-300x249.png 300w" sizes="(max-width: 492px) 100vw, 492px" /></p>
<ol>
<li>联表查询出文章的所属分类：</li>
</ol>
<p><img loading="lazy" decoding="async" width="1045" height="408" class="wp-image-7543" src="/wp-content/uploads/2018/06/word-image-149.png" srcset="/wp-content/uploads/2018/06/word-image-149.png 1045w, /wp-content/uploads/2018/06/word-image-149-300x117.png 300w, /wp-content/uploads/2018/06/word-image-149-768x300.png 768w, /wp-content/uploads/2018/06/word-image-149-1024x400.png 1024w" sizes="(max-width: 1045px) 100vw, 1045px" /></p>
<p>在模型中使用join进行联表</p>
<ol>
<li>给表tp_article建立表模型</li>
</ol>
<p><img loading="lazy" decoding="async" width="396" height="167" class="wp-image-7544" src="/wp-content/uploads/2018/06/word-image-150.png" srcset="/wp-content/uploads/2018/06/word-image-150.png 396w, /wp-content/uploads/2018/06/word-image-150-300x127.png 300w" sizes="(max-width: 396px) 100vw, 396px" /></p>
<p>b、联表</p>
<p><img loading="lazy" decoding="async" width="845" height="363" class="wp-image-7545" src="/wp-content/uploads/2018/06/word-image-151.png" srcset="/wp-content/uploads/2018/06/word-image-151.png 845w, /wp-content/uploads/2018/06/word-image-151-300x129.png 300w, /wp-content/uploads/2018/06/word-image-151-768x330.png 768w" sizes="(max-width: 845px) 100vw, 845px" /></p>
<p>结果：</p>
<p><img loading="lazy" decoding="async" width="453" height="526" class="wp-image-7546" src="/wp-content/uploads/2018/06/word-image-152.png" srcset="/wp-content/uploads/2018/06/word-image-152.png 453w, /wp-content/uploads/2018/06/word-image-152-258x300.png 258w" sizes="(max-width: 453px) 100vw, 453px" /></p>
<h2>6、聚合（统计）函数</h2>
<p>常用的有以下几个聚合（统计）函数</p>
<p><img loading="lazy" decoding="async" width="465" height="273" class="wp-image-7547" src="/wp-content/uploads/2018/06/word-image-153.png" srcset="/wp-content/uploads/2018/06/word-image-153.png 465w, /wp-content/uploads/2018/06/word-image-153-300x176.png 300w" sizes="(max-width: 465px) 100vw, 465px" /></p>
<p>注意:调用统计函数前均支持连贯方法操作，但必须保证最末端是统计函数。</p>
<p>代码如下：</p>
<p><img loading="lazy" decoding="async" width="897" height="438" class="wp-image-7548" src="/wp-content/uploads/2018/06/word-image-154.png" srcset="/wp-content/uploads/2018/06/word-image-154.png 897w, /wp-content/uploads/2018/06/word-image-154-300x146.png 300w, /wp-content/uploads/2018/06/word-image-154-768x375.png 768w" sizes="(max-width: 897px) 100vw, 897px" /></p>
<h2>模型完成时间戳的自动维护</h2>
<p>手册位置：模型&#8211;&gt;时间戳</p>
<ol>
<li>给表设置update_time、create_time字段。</li>
</ol>
<p><img loading="lazy" decoding="async" width="519" height="195" class="wp-image-7549" src="/wp-content/uploads/2018/06/word-image-155.png" srcset="/wp-content/uploads/2018/06/word-image-155.png 519w, /wp-content/uploads/2018/06/word-image-155-300x113.png 300w" sizes="(max-width: 519px) 100vw, 519px" /></p>
<ol>
<li>在当前模型中开启时间戳的自动写入</li>
</ol>
<p><img loading="lazy" decoding="async" width="889" height="289" class="wp-image-7550" src="/wp-content/uploads/2018/06/word-image-156.png" srcset="/wp-content/uploads/2018/06/word-image-156.png 889w, /wp-content/uploads/2018/06/word-image-156-300x98.png 300w, /wp-content/uploads/2018/06/word-image-156-768x250.png 768w" sizes="(max-width: 889px) 100vw, 889px" /></p>
<p>开启时间戳自动写入之后，只要使用模型完成新增或编辑的操作，就会对表的两个时间字段字段自动维护。</p>
<h1>十七、通过Db构造器操作数据库</h1>
<p>通Db构造器查询数据库无需实例化模型也可对数据进行curd操作。</p>
<p>手册位置：数据库&#8211;&gt;查询构造器</p>
<h2>查询数据-R</h2>
<ul>
<li>查询一条数据</li>
</ul>
<p>如：Db::table(&#8216;think_user&#8217;)-&gt;field(‘username,email’)-&gt;where(id,1)-&gt;find();</p>
<ul>
<li>查询多条数据</li>
</ul>
<p>如：Db::table(&#8216;think_user&#8217;)-&gt;where(id,1)-&gt;select();</p>
<p>如：Db::name(&#8216;user&#8217;)-&gt;order(‘id’,’desc’)-&gt;select(); #不带表前缀</p>
<p>注： Db::table()需要完整表名，带表前缀，DB::name()是不带表前缀,且他们都支持连贯操作方法，只需保证最末端是select或是find或统计函数。</p>
<p>代码如下：</p>
<p><img loading="lazy" decoding="async" width="755" height="245" class="wp-image-7551" src="/wp-content/uploads/2018/06/word-image-157.png" srcset="/wp-content/uploads/2018/06/word-image-157.png 755w, /wp-content/uploads/2018/06/word-image-157-300x97.png 300w" sizes="(max-width: 755px) 100vw, 755px" /></p>
<p>结果：</p>
<p><img loading="lazy" decoding="async" width="287" height="366" class="wp-image-7552" src="/wp-content/uploads/2018/06/word-image-158.png" srcset="/wp-content/uploads/2018/06/word-image-158.png 287w, /wp-content/uploads/2018/06/word-image-158-235x300.png 235w" sizes="(max-width: 287px) 100vw, 287px" /></p>
<h2>执行原生sql语句</h2>
<p>查询：Db::query(“select”);</p>
<p>增删改：Db::execute(“insert/update/delete”);</p>
<p><img loading="lazy" decoding="async" width="925" height="90" class="wp-image-7553" src="/wp-content/uploads/2018/06/word-image-159.png" srcset="/wp-content/uploads/2018/06/word-image-159.png 925w, /wp-content/uploads/2018/06/word-image-159-300x29.png 300w, /wp-content/uploads/2018/06/word-image-159-768x75.png 768w" sizes="(max-width: 925px) 100vw, 925px" /></p>
<h2>添加数据-C</h2>
<ul>
<li>添加一条数据</li>
</ul>
<p>$data = [&#8216;foo&#8217; =&gt; &#8216;bar&#8217;, &#8216;bar&#8217; =&gt; &#8216;foo&#8217;];</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;insert($data);</p>
<p>insert 方法添加数据成功返回添加成功的条数，insert 正常情况返回 1</p>
<ul>
<li>或者直接使用insertGetId方法新增数据并返回主键值：</li>
</ul>
<p>Db::name(&#8216;user&#8217;)-&gt;insertGetId($data);</p>
<ul>
<li>添加多条数据</li>
</ul>
<p>添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可</p>
<p>$data = [</p>
<p>[&#8216;foo&#8217; =&gt; &#8216;bar&#8217;, &#8216;bar&#8217; =&gt; &#8216;foo&#8217;],</p>
<p>[&#8216;foo&#8217; =&gt; &#8216;bar1&#8217;, &#8216;bar&#8217; =&gt; &#8216;foo1&#8217;],</p>
<p>[&#8216;foo&#8217; =&gt; &#8216;bar2&#8217;, &#8216;bar&#8217; =&gt; &#8216;foo2&#8217;]</p>
<p>];</p>
<p>Db::name(&#8216;user&#8217;)-&gt;insertAll($data);</p>
<p>insertAll 方法添加数据成功返回添加成功的条数</p>
<h2>删除数据-D</h2>
<ul>
<li>根据主键删除</li>
</ul>
<p>Db::table(&#8216;think_user&#8217;)-&gt;delete(1);</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;delete([1,2,3]);</p>
<ul>
<li>条件删除</li>
</ul>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;,1)-&gt;delete();</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;,'&lt;&#8216;,10)-&gt;delete();</p>
<p>delete 方法返回影响数据的条数，没有删除返回 0</p>
<h2>4、更新数据-U</h2>
<p>手册为主：数据库&#8211;&gt;查询构造器&#8211;&gt;更新数据</p>
<h3>更新数据表中的数据</h3>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;update([&#8216;name&#8217; =&gt; &#8216;thinkphp&#8217;]);</p>
<p>如果数据中包含主键，可以直接使用：</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;update([&#8216;name&#8217; =&gt; &#8216;thinkphp&#8217;,&#8217;id&#8217;=&gt;1]);</p>
<p>update 方法返回影响数据的条数，没修改任何数据返回 0</p>
<h3>更新某个字段的值</h3>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;,1)-&gt;setField(&#8216;name&#8217;, &#8216;thinkphp&#8217;);</p>
<p>setField 方法返回影响数据的条数，没修改任何数据字段返回 0</p>
<h3>自增或自减一个字段的值</h3>
<p>setInc/setDec 如不加第二个参数，默认值为1</p>
<p>// score 字段加 1</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setInc(&#8216;score&#8217;);</p>
<p>// score 字段加 5</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setInc(&#8216;score&#8217;, 5);</p>
<p>// score 字段减 1</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setDec(&#8216;score&#8217;);</p>
<p>// score 字段减 5</p>
<p>Db::table(&#8216;think_user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setDec(&#8216;score&#8217;, 5);</p>
<h3>助手db函数完成更新</h3>
<p>// 更新数据表中的数据</p>
<p>db(&#8216;user&#8217;)-&gt;where(&#8216;id&#8217;,1)-&gt;update([&#8216;name&#8217; =&gt; &#8216;thinkphp&#8217;]);</p>
<p>// 更新某个字段的值</p>
<p>db(&#8216;user&#8217;)-&gt;where(&#8216;id&#8217;,1)-&gt;setField(&#8216;name&#8217;,&#8217;thinkphp&#8217;);</p>
<p>// 自增 score 字段</p>
<p>db(&#8216;user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setInc(&#8216;score&#8217;);</p>
<p>// 自减 score 字段</p>
<p>db(&#8216;user&#8217;)-&gt;where(&#8216;id&#8217;, 1)-&gt;setDec(&#8216;score&#8217;);</p>
<h1>完成后台登录功能</h1>
<p>般用户表的第一个用户都是自己手工添加的。</p>
<ol>
<li>在配置文件config.php中添加一个password_salt的配置</li>
</ol>
<p><img loading="lazy" decoding="async" width="703" height="301" class="wp-image-7554" src="/wp-content/uploads/2018/06/word-image-160.png" srcset="/wp-content/uploads/2018/06/word-image-160.png 703w, /wp-content/uploads/2018/06/word-image-160-300x128.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></p>
<ol>
<li>把加密的结果复制到用户表的password字段中</li>
</ol>
<p><img loading="lazy" decoding="async" width="762" height="360" class="wp-image-7555" src="/wp-content/uploads/2018/06/word-image-161.png" srcset="/wp-content/uploads/2018/06/word-image-161.png 762w, /wp-content/uploads/2018/06/word-image-161-300x142.png 300w" sizes="(max-width: 762px) 100vw, 762px" /></p>
<ol>
<li>修改login.html登录表单</li>
</ol>
<p><img loading="lazy" decoding="async" width="1112" height="584" class="wp-image-7556" src="/wp-content/uploads/2018/06/word-image-162.png" srcset="/wp-content/uploads/2018/06/word-image-162.png 1112w, /wp-content/uploads/2018/06/word-image-162-300x158.png 300w, /wp-content/uploads/2018/06/word-image-162-768x403.png 768w, /wp-content/uploads/2018/06/word-image-162-1024x538.png 1024w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<ol>
<li>在login方法中判断是post请求，完成入库</li>
</ol>
<p><img loading="lazy" decoding="async" width="748" height="651" class="wp-image-7557" src="/wp-content/uploads/2018/06/word-image-163.png" srcset="/wp-content/uploads/2018/06/word-image-163.png 748w, /wp-content/uploads/2018/06/word-image-163-300x261.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></p>
<ol>
<li>在User模型中定义一个检出用户名和密码是否匹配的方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="872" height="654" class="wp-image-7558" src="/wp-content/uploads/2018/06/word-image-164.png" srcset="/wp-content/uploads/2018/06/word-image-164.png 872w, /wp-content/uploads/2018/06/word-image-164-300x225.png 300w, /wp-content/uploads/2018/06/word-image-164-768x576.png 768w" sizes="(max-width: 872px) 100vw, 872px" /></p>
<p>登录成功后，把session中的用户名信息回显到后台首页中（top.html）</p>
<p><img loading="lazy" decoding="async" width="1239" height="291" class="wp-image-7559" src="/wp-content/uploads/2018/06/word-image-165.png" srcset="/wp-content/uploads/2018/06/word-image-165.png 1239w, /wp-content/uploads/2018/06/word-image-165-300x70.png 300w, /wp-content/uploads/2018/06/word-image-165-768x180.png 768w, /wp-content/uploads/2018/06/word-image-165-1024x241.png 1024w" sizes="(max-width: 1239px) 100vw, 1239px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="220" height="82" class="wp-image-7560" src="/wp-content/uploads/2018/06/word-image-166.png" /></p>
<h1>完成后台退出功能</h1>
<p>核心：清除登录成功写入的session信息即可</p>
<ol>
<li>在Public控制器中建立一个logout的方法，清除session</li>
</ol>
<p><img loading="lazy" decoding="async" width="545" height="482" class="wp-image-7561" src="/wp-content/uploads/2018/06/word-image-167.png" srcset="/wp-content/uploads/2018/06/word-image-167.png 545w, /wp-content/uploads/2018/06/word-image-167-300x265.png 300w" sizes="(max-width: 545px) 100vw, 545px" /></p>
<ol>
<li>修改top.html模板的退出链接地址</li>
</ol>
<p><img loading="lazy" decoding="async" width="1230" height="280" class="wp-image-7562" src="/wp-content/uploads/2018/06/word-image-168.png" srcset="/wp-content/uploads/2018/06/word-image-168.png 1230w, /wp-content/uploads/2018/06/word-image-168-300x68.png 300w, /wp-content/uploads/2018/06/word-image-168-768x175.png 768w, /wp-content/uploads/2018/06/word-image-168-1024x233.png 1024w" sizes="(max-width: 1230px) 100vw, 1230px" /></p>
<h1>二十、完成登录防翻墙</h1>
<p>核心思想： 建立一个公共的控制器如：CommonController,在此控制器中做权限验证，判断是否有没有session,其他需要验证用户登录session信息的控制器就需要继承此控制器即可。</p>
<p><img loading="lazy" decoding="async" width="1016" height="371" class="wp-image-7563" src="/wp-content/uploads/2018/06/word-image-169.png" srcset="/wp-content/uploads/2018/06/word-image-169.png 1016w, /wp-content/uploads/2018/06/word-image-169-300x110.png 300w, /wp-content/uploads/2018/06/word-image-169-768x280.png 768w" sizes="(max-width: 1016px) 100vw, 1016px" /></p>
<p>把需要验证session的后台index控制器继承Common控制器即可：</p>
<p><img loading="lazy" decoding="async" width="699" height="234" class="wp-image-7564" src="/wp-content/uploads/2018/06/word-image-170.png" srcset="/wp-content/uploads/2018/06/word-image-170.png 699w, /wp-content/uploads/2018/06/word-image-170-300x100.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></p>
<p>注：Public控制器不可以继承，因为此时还没有session信息。</p>
<h1>二十一、完成登录验证</h1>
<p>概述：ThinkPHP5.0验证使用独立的\think\Validate类或者验证器进行验证。</p>
<p>手册位置：验证器。</p>
<p>手册示例：</p>
<p><img loading="lazy" decoding="async" width="475" height="614" class="wp-image-7565" src="/wp-content/uploads/2018/06/word-image-171.png" srcset="/wp-content/uploads/2018/06/word-image-171.png 475w, /wp-content/uploads/2018/06/word-image-171-232x300.png 232w" sizes="(max-width: 475px) 100vw, 475px" /></p>
<p>//定义验证规则语法：</p>
<p>$rule = [</p>
<p>‘表单name值’ =&gt; 规则（多个规则竖线|隔开）</p>
<p>]</p>
<p>//定义验证不通过的提示信息</p>
<p>$msg = [</p>
<p>‘表单name值.规则名’ =&gt; ‘此规则的不通过的提示信息’</p>
<p>]</p>
<p>代码如下：</p>
<p><img loading="lazy" decoding="async" width="791" height="706" class="wp-image-7566" src="/wp-content/uploads/2018/06/word-image-172.png" srcset="/wp-content/uploads/2018/06/word-image-172.png 791w, /wp-content/uploads/2018/06/word-image-172-300x268.png 300w, /wp-content/uploads/2018/06/word-image-172-768x685.png 768w" sizes="(max-width: 791px) 100vw, 791px" /></p>
<p>提示效果：</p>
<p><img loading="lazy" decoding="async" width="506" height="301" class="wp-image-7567" src="/wp-content/uploads/2018/06/word-image-173.png" srcset="/wp-content/uploads/2018/06/word-image-173.png 506w, /wp-content/uploads/2018/06/word-image-173-300x178.png 300w" sizes="(max-width: 506px) 100vw, 506px" /></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/7499.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DedeCMS二次开发（三）搜索页面、数据库操作</title>
		<link>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6348.html</link>
					<comments>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6348.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 16:36:19 +0000</pubDate>
				<category><![CDATA[DedeCMS]]></category>
		<category><![CDATA[二次开发]]></category>
		<category><![CDATA[搜索页面]]></category>
		<category><![CDATA[数据库操作]]></category>
		<guid isPermaLink="false">/?p=6348</guid>

					<description><![CDATA[dedecms第三天 完成搜索页面 要实现的效果: 显示搜索页面 a 在plus目录中添加sou.php文件, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a id="post-6348-_dedecms___"></a><a id="post-6348-_Toc256000000"></a><br />
  dedecms第三天
</p>
<p><a id="post-6348-_____________"></a>
</p>
<h1><a id="post-6348-________2"></a><a id="post-6348-_Toc256000004"></a>完成搜索页面</h1>
<p>
  要实现的效果:
</p>
<p><img loading="lazy" decoding="async" width="1235" height="536" src="/wp-content/uploads/2018/05/word-image-5793.png" class="wp-image-6359" srcset="/wp-content/uploads/2018/05/word-image-5793.png 1235w, /wp-content/uploads/2018/05/word-image-5793-300x130.png 300w, /wp-content/uploads/2018/05/word-image-5793-768x333.png 768w, /wp-content/uploads/2018/05/word-image-5793-1024x444.png 1024w" sizes="(max-width: 1235px) 100vw, 1235px" /></p>
<h2><a id="post-6348-________3"></a><a id="post-6348-_Toc256000005"></a><em>显示搜索页面</em></h2>
<p>
  a 在plus目录中添加sou.php文件,用于加载sou.html文件
</p>
<p><img loading="lazy" decoding="async" width="1026" height="767" src="/wp-content/uploads/2018/05/word-image-5794.png" class="wp-image-6360" srcset="/wp-content/uploads/2018/05/word-image-5794.png 1026w, /wp-content/uploads/2018/05/word-image-5794-300x224.png 300w, /wp-content/uploads/2018/05/word-image-5794-768x574.png 768w, /wp-content/uploads/2018/05/word-image-5794-1024x766.png 1024w" sizes="(max-width: 1026px) 100vw, 1026px" /><br />
<img loading="lazy" decoding="async" width="653" height="257" src="/wp-content/uploads/2018/05/word-image-5795.png" class="wp-image-6361" srcset="/wp-content/uploads/2018/05/word-image-5795.png 653w, /wp-content/uploads/2018/05/word-image-5795-300x118.png 300w" sizes="(max-width: 653px) 100vw, 653px" /></p>
<p>
  b访问之后页面输出的效果如下所示
</p>
<p><img loading="lazy" decoding="async" width="1536" height="209" src="/wp-content/uploads/2018/05/word-image-5796.png" class="wp-image-6362" srcset="/wp-content/uploads/2018/05/word-image-5796.png 1536w, /wp-content/uploads/2018/05/word-image-5796-300x41.png 300w, /wp-content/uploads/2018/05/word-image-5796-768x105.png 768w, /wp-content/uploads/2018/05/word-image-5796-1024x139.png 1024w" sizes="(max-width: 1536px) 100vw, 1536px" /></p>
<p>
  c 引入每一个dede中的公共文件
</p>
<p><img loading="lazy" decoding="async" width="910" height="289" src="/wp-content/uploads/2018/05/word-image-5797.png" class="wp-image-6363" srcset="/wp-content/uploads/2018/05/word-image-5797.png 910w, /wp-content/uploads/2018/05/word-image-5797-300x95.png 300w, /wp-content/uploads/2018/05/word-image-5797-768x244.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></p>
<p>
  d 将模板页面改名字为sou.html然后引入到sou.php文件中
</p>
<p><img loading="lazy" decoding="async" width="861" height="388" src="/wp-content/uploads/2018/05/word-image-5798.png" class="wp-image-6364" srcset="/wp-content/uploads/2018/05/word-image-5798.png 861w, /wp-content/uploads/2018/05/word-image-5798-300x135.png 300w, /wp-content/uploads/2018/05/word-image-5798-768x346.png 768w" sizes="(max-width: 861px) 100vw, 861px" /></p>
<p>
  在sou.php中进行引入
</p>
<p><img loading="lazy" decoding="async" width="844" height="289" src="/wp-content/uploads/2018/05/word-image-5799.png" class="wp-image-6365" srcset="/wp-content/uploads/2018/05/word-image-5799.png 844w, /wp-content/uploads/2018/05/word-image-5799-300x103.png 300w, /wp-content/uploads/2018/05/word-image-5799-768x263.png 768w" sizes="(max-width: 844px) 100vw, 844px" /></p>
<p>
  引入之后的页面:
</p>
<p><img loading="lazy" decoding="async" width="1076" height="417" src="/wp-content/uploads/2018/05/word-image-5800.png" class="wp-image-6366" srcset="/wp-content/uploads/2018/05/word-image-5800.png 1076w, /wp-content/uploads/2018/05/word-image-5800-300x116.png 300w, /wp-content/uploads/2018/05/word-image-5800-768x298.png 768w, /wp-content/uploads/2018/05/word-image-5800-1024x397.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" /></p>
<p>
  e 修改sou.html中的css文件路径和js路径
</p>
<p><img loading="lazy" decoding="async" width="764" height="302" src="/wp-content/uploads/2018/05/word-image-5801.png" class="wp-image-6367" srcset="/wp-content/uploads/2018/05/word-image-5801.png 764w, /wp-content/uploads/2018/05/word-image-5801-300x119.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></p>
<p>
  如果直接使用dede中的标签是不被解析的,因为我们现在直接访问html页面,没有给他生成静态的页面,所以他不能解析dede的标签.
</p>
<p>
  在这里我们直接使用原生的php标签进行引入即可
</p>
<p><img loading="lazy" decoding="async" width="907" height="229" src="/wp-content/uploads/2018/05/word-image-5802.png" class="wp-image-6368" srcset="/wp-content/uploads/2018/05/word-image-5802.png 907w, /wp-content/uploads/2018/05/word-image-5802-300x76.png 300w, /wp-content/uploads/2018/05/word-image-5802-768x194.png 768w" sizes="(max-width: 907px) 100vw, 907px" /></p>
<p>
  进行访问查看效果:
</p>
<p><img loading="lazy" decoding="async" width="1182" height="482" src="/wp-content/uploads/2018/05/word-image-5803.png" class="wp-image-6369" srcset="/wp-content/uploads/2018/05/word-image-5803.png 1182w, /wp-content/uploads/2018/05/word-image-5803-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5803-768x313.png 768w, /wp-content/uploads/2018/05/word-image-5803-1024x418.png 1024w" sizes="(max-width: 1182px) 100vw, 1182px" /></p>
<h2><a id="post-6348-_dede________"></a><a id="post-6348-_Toc256000006"></a><em>dede里面的数据库操作</em></h2>
<h3><a id="post-6348-__________"></a><a id="post-6348-_Toc256000007"></a>数据库的初始化操作</h3>
<p>
  默认情况下数据核心类是在include/commen.inc.php文件中引入了数据库核心类文件。
</p>
<p>
  dede默认提供了三种操作数据的核心类
</p>
<p>
  我们默认的数据库操作类是dedesql.class.php文件
</p>
<p>
  找到dedesql.class.php文件
</p>
<p><img loading="lazy" decoding="async" width="1243" height="506" src="/wp-content/uploads/2018/05/word-image-5804.png" class="wp-image-6370" srcset="/wp-content/uploads/2018/05/word-image-5804.png 1243w, /wp-content/uploads/2018/05/word-image-5804-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5804-768x313.png 768w, /wp-content/uploads/2018/05/word-image-5804-1024x417.png 1024w" sizes="(max-width: 1243px) 100vw, 1243px" /></p>
<p>
  查看dedesql.class.php中是如何实例化和引用相关的数据库类的
</p>
<p><img loading="lazy" decoding="async" width="1163" height="383" src="/wp-content/uploads/2018/05/word-image-5805.png" class="wp-image-6371" srcset="/wp-content/uploads/2018/05/word-image-5805.png 1163w, /wp-content/uploads/2018/05/word-image-5805-300x99.png 300w, /wp-content/uploads/2018/05/word-image-5805-768x253.png 768w, /wp-content/uploads/2018/05/word-image-5805-1024x337.png 1024w" sizes="(max-width: 1163px) 100vw, 1163px" /></p>
<p>
  有上面可知,我们直接使用$dsql这个实例化的类即可引用
</p>
<h3><a id="post-6348-_____"></a><a id="post-6348-_Toc256000008"></a>查询操作</h3>
<p>
  查询多条记录的方法
</p>
<p>
  $dsql-&gt;Execute(“me”,$sql语句) 类似于$res=mysql_query($sql语句)
</p>
<p>
  注释:me的意思是将sql执行完成之后的结果赋给$me
</p>
<p>
  取出数据的方法：
</p>
<p>
  $dsql-&gt;GetArray(“me”);//该方法取出一次数据，游标就会向下移动一次
</p>
<p>
  上面的这个方法的功能就类似于$row=mysql_fetch_assoc($res)
</p>
<p>
  案例：
</p>
<p>
  $sql=”select * from goods”;
</p>
<p>
  $dsql-&gt;Execute(“abc”,$sql);
</p>
<p>
  取出数据：
</p>
<p>
  $data=[];
</p>
<p>
  While($row=$dsql-&gt;GetArray(“abc”)){
</p>
<p>
  		$data[]=$row;
</p>
<p>
  }
</p>
<p>
  取出单行数据的方式：
</p>
<p>
  $dsql-&gt;GetOne($sql);//该方法只返回一行数据信息
</p>
<h3><a id="post-6348-________4"></a><a id="post-6348-_Toc256000009"></a>增删改的操作</h3>
<p>
  如果要想对表中的数据进行增删改操作，并且不需要关注影响记录条数
</p>
<p>
  $dsql-&gt;ExecuteNoneQuery($sql语句)
</p>
<p>
  如果想要对表中的数据进行增删改操作，同时也需要关注影响记录条数
</p>
<p>
  $dsql-&gt; ExecuteNoneQuery2($sql语句)
</p>
<h2><a id="post-6348-___________"></a><a id="post-6348-_Toc256000010"></a><em>展示出搜索页面的头部</em></h2>
<p>
  需求:取出搜索页面的导航栏部分.
</p>
<p><img loading="lazy" decoding="async" width="993" height="101" src="/wp-content/uploads/2018/05/word-image-5806.png" class="wp-image-6372" srcset="/wp-content/uploads/2018/05/word-image-5806.png 993w, /wp-content/uploads/2018/05/word-image-5806-300x31.png 300w, /wp-content/uploads/2018/05/word-image-5806-768x78.png 768w" sizes="(max-width: 993px) 100vw, 993px" /></p>
<p>
  分析:1 导航栏的数据保存在dede_arctype表中.
</p>
<p>
        2 只需要取出其中的电影模型下面的顶级导航栏.
</p>
<h3><a id="post-6348-______2"></a><a id="post-6348-_Toc256000011"></a>取出数据</h3>
<p>
  思路就是由于要取出的是栏目顶级导航，所以在查询时候要指定reid=0 并且要确定的就是我们是从dede_arctype表中取得数据信息
</p>
<p><img loading="lazy" decoding="async" width="1253" height="556" src="/wp-content/uploads/2018/05/word-image-5807.png" class="wp-image-6373" srcset="/wp-content/uploads/2018/05/word-image-5807.png 1253w, /wp-content/uploads/2018/05/word-image-5807-300x133.png 300w, /wp-content/uploads/2018/05/word-image-5807-768x341.png 768w, /wp-content/uploads/2018/05/word-image-5807-1024x454.png 1024w" sizes="(max-width: 1253px) 100vw, 1253px" /></p>
<p>
  打印的数据效果如夏所示:
</p>
<p><img loading="lazy" decoding="async" width="756" height="265" src="/wp-content/uploads/2018/05/word-image-5808.png" class="wp-image-6374" srcset="/wp-content/uploads/2018/05/word-image-5808.png 756w, /wp-content/uploads/2018/05/word-image-5808-300x105.png 300w" sizes="(max-width: 756px) 100vw, 756px" /></p>
<p>
  在sou.html页面中循环输出栏目数据
</p>
<p><img loading="lazy" decoding="async" width="1141" height="224" src="/wp-content/uploads/2018/05/word-image-5809.png" class="wp-image-6375" srcset="/wp-content/uploads/2018/05/word-image-5809.png 1141w, /wp-content/uploads/2018/05/word-image-5809-300x59.png 300w, /wp-content/uploads/2018/05/word-image-5809-768x151.png 768w, /wp-content/uploads/2018/05/word-image-5809-1024x201.png 1024w" sizes="(max-width: 1141px) 100vw, 1141px" /></p>
<p>
  最终的输出效果如下所示:
</p>
<p><img loading="lazy" decoding="async" width="799" height="302" src="/wp-content/uploads/2018/05/word-image-5810.png" class="wp-image-6376" srcset="/wp-content/uploads/2018/05/word-image-5810.png 799w, /wp-content/uploads/2018/05/word-image-5810-300x113.png 300w, /wp-content/uploads/2018/05/word-image-5810-768x290.png 768w" sizes="(max-width: 799px) 100vw, 799px" /></p>
<p>
  多学一招:
</p>
<p>
  这里要拼接处typeurl的地址:在arclist中找到这个标签即可
</p>
<p><img loading="lazy" decoding="async" width="1172" height="353" src="/wp-content/uploads/2018/05/word-image-5811.png" class="wp-image-6377" srcset="/wp-content/uploads/2018/05/word-image-5811.png 1172w, /wp-content/uploads/2018/05/word-image-5811-300x90.png 300w, /wp-content/uploads/2018/05/word-image-5811-768x231.png 768w, /wp-content/uploads/2018/05/word-image-5811-1024x308.png 1024w" sizes="(max-width: 1172px) 100vw, 1172px" /></p>
<p><a id="post-6348-______3"></a>
</p>
<h2><a id="post-6348-______________2"></a><a id="post-6348-_Toc256000013"></a><em>取出电影数据</em></h2>
<p>
  页面的效果图如下所示:
</p>
<p><img loading="lazy" decoding="async" width="974" height="570" src="/wp-content/uploads/2018/05/word-image-5812.png" class="wp-image-6378" srcset="/wp-content/uploads/2018/05/word-image-5812.png 974w, /wp-content/uploads/2018/05/word-image-5812-300x176.png 300w, /wp-content/uploads/2018/05/word-image-5812-768x449.png 768w" sizes="(max-width: 974px) 100vw, 974px" /></p>
<p>
  分析：
</p>
<p>
  该数据涉及到了附加表中的数据信息（语言、评分值）还有就是内容主表中的电影名称信息以及我们要进行处理的就是电影的对应url地址（arcurl）
</p>
<h3><a id="post-6348-________5"></a><a id="post-6348-_Toc256000014"></a>取出电影数据</h3>
<p>
  代码如下
</p>
<p><img loading="lazy" decoding="async" width="1579" height="367" src="/wp-content/uploads/2018/05/word-image-5813.png" class="wp-image-6379" srcset="/wp-content/uploads/2018/05/word-image-5813.png 1579w, /wp-content/uploads/2018/05/word-image-5813-300x70.png 300w, /wp-content/uploads/2018/05/word-image-5813-768x179.png 768w, /wp-content/uploads/2018/05/word-image-5813-1024x238.png 1024w" sizes="(max-width: 1579px) 100vw, 1579px" /></p>
<p>
  多学一招:arcurl的拼接需要在arclib.php中获取:
</p>
<p><img loading="lazy" decoding="async" width="1191" height="580" src="/wp-content/uploads/2018/05/word-image-5814.png" class="wp-image-6380" srcset="/wp-content/uploads/2018/05/word-image-5814.png 1191w, /wp-content/uploads/2018/05/word-image-5814-300x146.png 300w, /wp-content/uploads/2018/05/word-image-5814-768x374.png 768w, /wp-content/uploads/2018/05/word-image-5814-1024x499.png 1024w" sizes="(max-width: 1191px) 100vw, 1191px" /></p>
<h3><a id="post-6348-___________2"></a><a id="post-6348-_Toc256000015"></a>完成电影数据的遍历</h3>
<p><img loading="lazy" decoding="async" width="1225" height="344" src="/wp-content/uploads/2018/05/word-image-5815.png" class="wp-image-6381" srcset="/wp-content/uploads/2018/05/word-image-5815.png 1225w, /wp-content/uploads/2018/05/word-image-5815-300x84.png 300w, /wp-content/uploads/2018/05/word-image-5815-768x216.png 768w, /wp-content/uploads/2018/05/word-image-5815-1024x288.png 1024w" sizes="(max-width: 1225px) 100vw, 1225px" /></p>
<p><a id="post-6348-________"></a><br />
  最终的效果如下所示:
</p>
<p><img loading="lazy" decoding="async" width="992" height="306" src="/wp-content/uploads/2018/05/word-image-5816.png" class="wp-image-6382" srcset="/wp-content/uploads/2018/05/word-image-5816.png 992w, /wp-content/uploads/2018/05/word-image-5816-300x93.png 300w, /wp-content/uploads/2018/05/word-image-5816-768x237.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></p>
<p><a id="post-6348-______________3"></a>
</p>
<h2><a id="post-6348-____________"></a><a id="post-6348-_Toc256000018"></a><em>在搜索页面显示年代数据</em></h2>
<p><img loading="lazy" decoding="async" width="972" height="206" src="/wp-content/uploads/2018/05/word-image-5817.png" class="wp-image-6383" srcset="/wp-content/uploads/2018/05/word-image-5817.png 972w, /wp-content/uploads/2018/05/word-image-5817-300x64.png 300w, /wp-content/uploads/2018/05/word-image-5817-768x163.png 768w" sizes="(max-width: 972px) 100vw, 972px" /></p>
<p>
  分析：
</p>
<p>
  1、	首先每一个年代数据都要有一个url地址，
</p>
<p>
  2、	需要有一个是否处于选中状态判断，
</p>
<p>
  3、	同时也要考虑把其他条件参数给带上
</p>
<p>
  4、	由于全部字样也需要考虑是否处于选中状态，所以也要封装到数组中来
</p>
<p>
  思路：可以考虑将这个年代数据给封装成一个数组
</p>
<p>
  $ndData=array(
</p>
<p>
  array(
</p>
<p>
  	‘name’=&gt;2016,
</p>
<p>
  	‘url’=&gt;用来跳转的url地址 （diqu=欧美&amp; niandai=2016）
</p>
<p>
  	‘selected’=&gt;判断是否处于选中状态
</p>
<p>
  ),
</p>
<p>
  array(
</p>
<p>
  	‘name’=&gt;2015,
</p>
<p>
  	‘url’=&gt;用来跳转的url地址（niandai=2015&amp;diqu=欧美）
</p>
<p>
  	‘selected’=&gt;判断是否处于选中状态
</p>
<p>
  ),
</p>
<p>
  array(
</p>
<p>
  	‘name’=&gt;’全部’,
</p>
<p>
  	‘url’=&gt;用来跳转的url地址（niandai=2015&amp;diqu=欧美）
</p>
<p>
  	‘selected’=&gt;判断是否处于选中状态
</p>
<p>
  )
</p>
<p>
  )
</p>
<h3><a id="post-6348-________6"></a><a id="post-6348-_Toc256000019"></a>取出年代数据</h3>
<p>
  if($_GET[&#8216;niandai&#8217;])
</p>
<p>
       $sel = &#8221;;
</p>
<p>
   else
</p>
<p>
       $sel = &#8216;class=&#8221;all&#8221;&#8216;;
</p>
</p>
<p>
   $nianData[] = array(
</p>
<p>
       &#8216;name&#8217;=&gt;&#8221;全部&#8221;,
</p>
<p>
       &#8216;url&#8217;=&gt;getUrl(),
</p>
<p>
       &#8216;selected&#8217;=&gt;$sel
</p>
<p>
   );
</p>
</p>
<p>
  $sql = &#8220;select distinct niandai from dede_addonmovie&#8221;;
</p>
<p>
  $dsql-&gt;Execute(&#8216;nian&#8217;,$sql);
</p>
<p>
  while($row = $dsql-&gt;GetArray(&#8216;nian&#8217;)){
</p>
<p>
       if($_GET[&#8216;niandai&#8217;]==$row[&#8216;niandai&#8217;]){
</p>
<p>
           $sel = &#8216;class=&#8221;all&#8221;&#8216;;
</p>
<p>
       }else
</p>
<p>
           $sel = &#8221;;
</p>
</p>
<p>
       $nianData[] = array(
</p>
<p>
           &#8216;name&#8217;=&gt;$row[&#8216;niandai&#8217;],
</p>
<p>
           &#8216;url&#8217;=&gt;&#8217;?niandai=&#8217;.$row[&#8216;niandai&#8217;].getUrl(&#8216;niandai&#8217;),
</p>
<p>
           &#8216;selected&#8217;=&gt;$sel
</p>
<p>
       );
</p>
</p>
<p>
  }
</p>
<p>
  url的拼接函数如下所示:
</p>
<p>
  function getUrl($default=&#8221;){
</p>
<p>
      $str = &#8221;;
</p>
<p>
      if($default !=&#8217;niandai&#8217;){
</p>
<p>
          if($_GET[&#8216;niandai&#8217;]){
</p>
<p>
              $str .= &#8216;&amp;niandai=&#8217;.$_GET[&#8216;niandai&#8217;];
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      if($default!=&#8217;type&#8217;){
</p>
<p>
          if($_GET[&#8216;type&#8217;])
</p>
<p>
              $str .= &#8216;&amp;type=&#8217;.$_GET[&#8216;type&#8217;];
</p>
<p>
      }
</p>
<p>
      if($default!=&#8217;diqu&#8217;){
</p>
<p>
          if($_GET[&#8216;diqu&#8217;])
</p>
<p>
              $str .= &#8216;&amp;diqu=&#8217;.$_GET[&#8216;diqu&#8217;];
</p>
<p>
      }
</p>
<p>
  }
</p>
<h3><a id="post-6348-_________"></a><a id="post-6348-_Toc256000020"></a>完成年代数据遍历</h3>
<p><img loading="lazy" decoding="async" width="1536" height="419" src="/wp-content/uploads/2018/05/word-image-5818.png" class="wp-image-6384" srcset="/wp-content/uploads/2018/05/word-image-5818.png 1536w, /wp-content/uploads/2018/05/word-image-5818-300x82.png 300w, /wp-content/uploads/2018/05/word-image-5818-768x210.png 768w, /wp-content/uploads/2018/05/word-image-5818-1024x279.png 1024w" sizes="(max-width: 1536px) 100vw, 1536px" /></p>
<h3><a id="post-6348-______4"></a><a id="post-6348-_Toc256000021"></a>最终效果</h3>
<p><img loading="lazy" decoding="async" width="428" height="76" src="/wp-content/uploads/2018/05/word-image-5819.png" class="wp-image-6385" srcset="/wp-content/uploads/2018/05/word-image-5819.png 428w, /wp-content/uploads/2018/05/word-image-5819-300x53.png 300w" sizes="(max-width: 428px) 100vw, 428px" /></p>
<h2><a id="post-6348-_____________2"></a><a id="post-6348-_Toc256000022"></a><em>在搜索页面显示地区数据</em></h2>
<h3><a id="post-6348-_________2"></a><a id="post-6348-_Toc256000023"></a>取出数据的代码</h3>
<p><img loading="lazy" decoding="async" width="1133" height="194" src="/wp-content/uploads/2018/05/word-image-5820.png" class="wp-image-6386" srcset="/wp-content/uploads/2018/05/word-image-5820.png 1133w, /wp-content/uploads/2018/05/word-image-5820-300x51.png 300w, /wp-content/uploads/2018/05/word-image-5820-768x132.png 768w, /wp-content/uploads/2018/05/word-image-5820-1024x175.png 1024w" sizes="(max-width: 1133px) 100vw, 1133px" /></p>
<h3><a id="post-6348-___________3"></a><a id="post-6348-_Toc256000024"></a>完成地区数据的遍历</h3>
<p><img loading="lazy" decoding="async" width="1257" height="804" src="/wp-content/uploads/2018/05/word-image-5821.png" class="wp-image-6387" srcset="/wp-content/uploads/2018/05/word-image-5821.png 1257w, /wp-content/uploads/2018/05/word-image-5821-300x192.png 300w, /wp-content/uploads/2018/05/word-image-5821-768x491.png 768w, /wp-content/uploads/2018/05/word-image-5821-1024x655.png 1024w" sizes="(max-width: 1257px) 100vw, 1257px" /><br />
<img loading="lazy" decoding="async" width="549" height="65" src="/wp-content/uploads/2018/05/word-image-5822.png" class="wp-image-6388" srcset="/wp-content/uploads/2018/05/word-image-5822.png 549w, /wp-content/uploads/2018/05/word-image-5822-300x36.png 300w" sizes="(max-width: 549px) 100vw, 549px" /></p>
<h2><a id="post-6348-______________4"></a><a id="post-6348-_Toc256000025"></a><em>在搜索页面显示出类型数据</em></h2>
<p><img loading="lazy" decoding="async" width="816" height="206" src="/wp-content/uploads/2018/05/word-image-5823.png" class="wp-image-6389" srcset="/wp-content/uploads/2018/05/word-image-5823.png 816w, /wp-content/uploads/2018/05/word-image-5823-300x76.png 300w, /wp-content/uploads/2018/05/word-image-5823-768x194.png 768w" sizes="(max-width: 816px) 100vw, 816px" /></p>
<h3><a id="post-6348-_________3"></a><a id="post-6348-_Toc256000026"></a>取出数据的代码</h3>
<p><img loading="lazy" decoding="async" width="1020" height="384" src="/wp-content/uploads/2018/05/word-image-5824.png" class="wp-image-6390" srcset="/wp-content/uploads/2018/05/word-image-5824.png 1020w, /wp-content/uploads/2018/05/word-image-5824-300x113.png 300w, /wp-content/uploads/2018/05/word-image-5824-768x289.png 768w" sizes="(max-width: 1020px) 100vw, 1020px" /><br />
<img loading="lazy" decoding="async" width="1055" height="496" src="/wp-content/uploads/2018/05/word-image-5825.png" class="wp-image-6391" srcset="/wp-content/uploads/2018/05/word-image-5825.png 1055w, /wp-content/uploads/2018/05/word-image-5825-300x141.png 300w, /wp-content/uploads/2018/05/word-image-5825-768x361.png 768w, /wp-content/uploads/2018/05/word-image-5825-1024x481.png 1024w" sizes="(max-width: 1055px) 100vw, 1055px" /></p>
<p>
  最终的url函数如下所示:
</p>
<p><img loading="lazy" decoding="async" width="897" height="630" src="/wp-content/uploads/2018/05/word-image-5826.png" class="wp-image-6392" srcset="/wp-content/uploads/2018/05/word-image-5826.png 897w, /wp-content/uploads/2018/05/word-image-5826-300x211.png 300w, /wp-content/uploads/2018/05/word-image-5826-768x539.png 768w" sizes="(max-width: 897px) 100vw, 897px" /></p>
<h3><a id="post-6348-__________2"></a><a id="post-6348-_Toc256000027"></a>完成类型数据遍历</h3>
<p><img loading="lazy" decoding="async" width="1117" height="256" src="/wp-content/uploads/2018/05/word-image-5827.png" class="wp-image-6393" srcset="/wp-content/uploads/2018/05/word-image-5827.png 1117w, /wp-content/uploads/2018/05/word-image-5827-300x69.png 300w, /wp-content/uploads/2018/05/word-image-5827-768x176.png 768w, /wp-content/uploads/2018/05/word-image-5827-1024x235.png 1024w" sizes="(max-width: 1117px) 100vw, 1117px" /></p>
<p>
  最终效果：
</p>
<p><img loading="lazy" decoding="async" width="529" height="60" src="/wp-content/uploads/2018/05/word-image-5828.png" class="wp-image-6394" srcset="/wp-content/uploads/2018/05/word-image-5828.png 529w, /wp-content/uploads/2018/05/word-image-5828-300x34.png 300w" sizes="(max-width: 529px) 100vw, 529px" /></p>
<p>
  最终的效果如下所示:
</p>
<p><img loading="lazy" decoding="async" width="660" height="569" src="/wp-content/uploads/2018/05/word-image-5829.png" class="wp-image-6395" srcset="/wp-content/uploads/2018/05/word-image-5829.png 660w, /wp-content/uploads/2018/05/word-image-5829-300x259.png 300w" sizes="(max-width: 660px) 100vw, 660px" /></p>
<h2><a id="post-6348-_____________SQL___"></a><a id="post-6348-_Toc256000028"></a><em>把地址栏里面的条件添加到SQL语句中</em></h2>
</p>
<p><img loading="lazy" decoding="async" width="1217" height="584" src="/wp-content/uploads/2018/05/word-image-5830.png" class="wp-image-6396" srcset="/wp-content/uploads/2018/05/word-image-5830.png 1217w, /wp-content/uploads/2018/05/word-image-5830-300x144.png 300w, /wp-content/uploads/2018/05/word-image-5830-768x369.png 768w, /wp-content/uploads/2018/05/word-image-5830-1024x491.png 1024w" sizes="(max-width: 1217px) 100vw, 1217px" /></p>
<p><a id="post-6348-___________4"></a>
</p>
<p>
  最终效果：
</p>
<p><a id="post-6348-_________4"></a>
</p>
<p><img loading="lazy" decoding="async" width="894" height="729" src="/wp-content/uploads/2018/05/word-image-5831.png" class="wp-image-6397" srcset="/wp-content/uploads/2018/05/word-image-5831.png 894w, /wp-content/uploads/2018/05/word-image-5831-300x245.png 300w, /wp-content/uploads/2018/05/word-image-5831-768x626.png 768w" sizes="(max-width: 894px) 100vw, 894px" /></p>
<h2><a id="post-6348-____________2"></a><a id="post-6348-_Toc256000032"></a><em>把查询的条件显示出来</em></h2>
<p>
  分析：由于url地址栏中的查询参数信息，在这个位置都要显示出来，那么我们可以在处理查询条件的位置来同步我们的数组（就是用来在页面中遍历查询条件的）
</p>
<p>
  $search=array(
</p>
<p>
  array(
</p>
<p>
  	‘name’=&gt;查询条件的名称,
</p>
<p>
  	‘url’=&gt;对应url地址
</p>
<p>
  )
</p>
<p>
  );
</p>
<h3><a id="post-6348-____SQL___________"></a><a id="post-6348-_Toc256000033"></a>在拼接SQL语句的位置封装条件数组</h3>
<p>
  $searche = array();
</p>
<p>
  $where = &#8221;;
</p>
<p>
  if($_GET[&#8216;niandai&#8217;]){
</p>
<p>
      $where .=&#8221;and addf.niandai='{$_GET[&#8216;niandai&#8217;]}'&#8221;;
</p>
<p>
      $searche[] = array(
</p>
<p>
          &#8216;name&#8217;=&gt;$_GET[&#8216;niadai&#8217;],
</p>
<p>
          &#8216;url&#8217;=&gt;getUrl()
</p>
<p>
      );
</p>
<p>
  }
</p>
<p>
  if($_GET[&#8216;diqu&#8217;]){
</p>
<p>
      $where .=&#8221;and addf.diqu='{$_GET[&#8216;diqu&#8217;]}'&#8221;;
</p>
<p>
      $searche[]= array(
</p>
<p>
          &#8216;name&#8217;=&gt;$_GET[&#8216;diqu&#8217;],
</p>
<p>
          &#8216;url&#8217;=&gt;getUrl()
</p>
<p>
      );
</p>
<p>
  }
</p>
<p>
  if($_GET[&#8216;type&#8217;]){
</p>
<p>
      $where .=&#8221;and cha.typename='{$_GET[&#8216;type&#8217;]}'&#8221;;
</p>
<p>
      $searche[] =array(
</p>
<p>
          &#8216;name&#8217;=&gt;$_GET[&#8216;type&#8217;],
</p>
<p>
          &#8216;url&#8217;=&gt;getUrl()
</p>
<p>
      );
</p>
<p>
  }
</p>
<h3><a id="post-6348-________7"></a><a id="post-6348-_Toc256000034"></a>完成条件遍历</h3>
<p><img loading="lazy" decoding="async" width="1172" height="342" src="/wp-content/uploads/2018/05/word-image-5832.png" class="wp-image-6398" srcset="/wp-content/uploads/2018/05/word-image-5832.png 1172w, /wp-content/uploads/2018/05/word-image-5832-300x88.png 300w, /wp-content/uploads/2018/05/word-image-5832-768x224.png 768w, /wp-content/uploads/2018/05/word-image-5832-1024x299.png 1024w" sizes="(max-width: 1172px) 100vw, 1172px" /></p>
<p>
  最终效果：
</p>
<p><img loading="lazy" decoding="async" width="289" height="48" src="/wp-content/uploads/2018/05/word-image-5833.png" class="wp-image-6399" /></p>
<h2><a id="post-6348-________8"></a><a id="post-6348-_Toc256000035"></a><em>实现搜索功能</em></h2>
<p><img loading="lazy" decoding="async" width="702" height="206" src="/wp-content/uploads/2018/05/word-image-5834.png" class="wp-image-6400" srcset="/wp-content/uploads/2018/05/word-image-5834.png 702w, /wp-content/uploads/2018/05/word-image-5834-300x88.png 300w" sizes="(max-width: 702px) 100vw, 702px" /></p>
<h3><a id="post-6348-______5"></a><a id="post-6348-_Toc256000036"></a>修改表单</h3>
<p><img loading="lazy" decoding="async" width="1190" height="331" src="/wp-content/uploads/2018/05/word-image-5835.png" class="wp-image-6401" srcset="/wp-content/uploads/2018/05/word-image-5835.png 1190w, /wp-content/uploads/2018/05/word-image-5835-300x83.png 300w, /wp-content/uploads/2018/05/word-image-5835-768x214.png 768w, /wp-content/uploads/2018/05/word-image-5835-1024x285.png 1024w" sizes="(max-width: 1190px) 100vw, 1190px" /></p>
<h3><a id="post-6348-________SQL___"></a><a id="post-6348-_Toc256000037"></a>把条件给拼接到SQL语句中</h3>
<p><img loading="lazy" decoding="async" width="1114" height="260" src="/wp-content/uploads/2018/05/word-image-5836.png" class="wp-image-6402" srcset="/wp-content/uploads/2018/05/word-image-5836.png 1114w, /wp-content/uploads/2018/05/word-image-5836-300x70.png 300w, /wp-content/uploads/2018/05/word-image-5836-768x179.png 768w, /wp-content/uploads/2018/05/word-image-5836-1024x239.png 1024w" sizes="(max-width: 1114px) 100vw, 1114px" /></p>
<p>
  最终效果：
</p>
<p><a id="post-6348-____________3"></a><a id="post-6348-______________5"></a>
</p>
<p><img loading="lazy" decoding="async" width="794" height="534" src="/wp-content/uploads/2018/05/word-image-5837.png" class="wp-image-6403" srcset="/wp-content/uploads/2018/05/word-image-5837.png 794w, /wp-content/uploads/2018/05/word-image-5837-300x202.png 300w, /wp-content/uploads/2018/05/word-image-5837-768x517.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6348.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Laravel框架（二）CSRF攻击、闪存数据、留言板案例、数据库操作、DB类操作、内置分页功能</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6168.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6168.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 16:12:46 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[CSRF攻击]]></category>
		<category><![CDATA[DB类操作]]></category>
		<category><![CDATA[内置分页功能]]></category>
		<category><![CDATA[数据库操作]]></category>
		<category><![CDATA[留言板案例]]></category>
		<category><![CDATA[闪存数据]]></category>
		<guid isPermaLink="false">/?p=6168</guid>

					<description><![CDATA[Laravel框架第2天 复习回顾 了解Laravel：就是用PHP写的框架 安装和使用：必须laravel5 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1><a id="post-6168-_Toc487990937"></a><a id="post-6168-_Toc487903166"></a>Laravel框架第2天</h1>
<h1>复习回顾</h1>
<p>
  了解Laravel：就是用PHP写的框架
</p>
<p>
  安装和使用：必须laravel5.4(php&gt;=5.6) 开启openssl、pdo、mbstring、fileinfo
</p>
<p>
  目录说明
</p>
<p>
  控制器语法：php artisan make:controller 平台名\控制器名Controller
</p>
<p>
  加载视图：return view（视图文件，compact（变量名，变量名，变量名））
</p>
<p>
  脚下留心：
</p>
<p>
  1）打开views下面子文件夹则用点隔开，如：view（‘a.xxx’）
</p>
<p>
  2）优先打开blade模板文件
</p>
<p>
  模板标签：
</p>
<p>
  1）输出变量：{{ $变量名 }}
</p>
<p>
  2）判断循环等潜规则： @标签名   @end标签名
</p>
<p>
  路由
</p>
<p>
      基本语法：Route::请求类型（路径，闭包函数或控制器方法）
</p>
<p>
  匹配指定类型：Route::match（[类型1,..,类型n]，路径，闭包函数或控制器方法）
</p>
<p>
  匹配任意类型：Route::any（路径，闭包函数或控制器方法）
</p>
<p>
  路由参数语法：Route::请求类型（路径/{参数}，闭包函数或控制器方法）-&gt;where（参数名，正则）
</p>
<p>
  说明
</p>
<p>
  1）多个参数则在路径处写多个{}即可
</p>
<p>
  2）多个限制则用数组来写，键是参数名，值是对应的正则
</p>
<p>
  路由分组
</p>
<p>
  好处：减少冗余
</p>
<p>
  语法：
</p>
<p>
  Route::group([&#8216;namespace&#8217;=&gt;&#8221;，&#8217;prefix&#8217;=&gt;&#8221;],function(){
</p>
</p>
<p>
      基本语法：Route::请求类型（路径，闭包函数或控制器方法）
</p>
<p>
      基本语法：Route::请求类型（路径，闭包函数或控制器方法）
</p>
<p>
  });
</p>
<p>
  路由别名：
</p>
<p>
  作用：避免后期通过url方法时感觉长
</p>
<p>
  解决：通过as别名
</p>
<p>
  语法：
</p>
<p>
  Route::请求类型（路径，[
</p>
<p>
  	&#8216;as&#8217; =&gt; 别名,
</p>
<p>
  	&#8216;uses&#8217; =&gt; 闭包函数或控制器方法
</p>
<p>
  ]）
</p>
<p>
  后期将url函数替换成 route函数(别名) 就可以自动生成该别名对应的路由
</p>
<p>
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
</p>
<p>
  输入请求：
</p>
<p>
  Request
</p>
<p>
  $request-&gt;all() 		获取所有数据
</p>
<p>
  $request-&gt;input(键 [, 默认值])  获取get数据
</p>
<p>
  $request-&gt;only（[参数名1，&#8230;，参数名n]）    获取指定数据
</p>
<p>
  $request-&gt;except（[参数名1，&#8230;，参数名n]）   获取指定数据外的所有数据
</p>
<p>
  Input
</p>
<p>
  Input::all()			获取所有数据
</p>
<p>
  Input::get(键[, 默认值]) 	获取get数据
</p>
<p>
  Input::only（[键1，&#8230;，键n]）   获取指定数据
</p>
<p>
  Input::except（[键1，&#8230;，键n]）获取指定数据外的所有数据
</p>
<p>
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
</p>
<h1>一、CSRF攻击</h1>
<h2><a id="post-6168-_Toc487990938"></a>1、什么是CSRF攻击</h2>
<ul>
<li>
    CSRF（Cross-site request forgery）中文名：跨站请求伪造。
  </li>
<li>
    CSRF是网站攻击的一种，存在巨大的危险性。
  </li>
</ul>
<h2>2、CSRF攻击场景 </h2>
<h3>1）跨站攻击留言板（随便写一个表单只要知道请求地址和请求参数就可以提交，危险 ）</h3>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  	&lt;title&gt;测试攻击&lt;/title&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  	&lt;form action=&#8221;http://localhost/laravel54/public/msg&#8221; method=&#8221;post&#8221;&gt;
</p>
<p>
  		&lt;p&gt;
</p>
<p>
  			用户名：&lt;input type=&#8221;text&#8221; name=&#8221;uname&#8221;/&gt;
</p>
<p>
  		&lt;/p&gt;
</p>
<p>
  		&lt;p&gt;
</p>
<p>
  			内容：&lt;input type=&#8221;text&#8221; name=&#8221;content&#8221;/&gt;
</p>
<p>
  		&lt;/p&gt;
</p>
<p>
  		&lt;p&gt;
</p>
<p>
  			&lt;input type=&#8221;submit&#8221; value=&#8221;提交&#8221;/&gt;
</p>
<p>
  		&lt;/p&gt;
</p>
<p>
  	&lt;/form&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<h3>2）实战慕课网攻击</h3>
<p><img loading="lazy" decoding="async" width="1073" height="649" src="/wp-content/uploads/2018/05/word-image-5615.png" class="wp-image-6169" srcset="/wp-content/uploads/2018/05/word-image-5615.png 1073w, /wp-content/uploads/2018/05/word-image-5615-300x181.png 300w, /wp-content/uploads/2018/05/word-image-5615-768x465.png 768w, /wp-content/uploads/2018/05/word-image-5615-1024x619.png 1024w" sizes="(max-width: 1073px) 100vw, 1073px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.初始化curl
</p>
<p>
  $ch = curl_init();
</p>
<p>
  //2.配置
</p>
<p>
  // 设置header需要发送的参数
</p>
<p>
  $header = array(
</p>
<p>
      &#8216;Cookie: imooc_uuid=d67f1568-c3c5-4aca-8e4b-5eabd35f8409; imooc_isnew=1; imooc_isnew_ct=1515116337; IMCDNS=0; loginstate=1; apsid=NkNWUxODA2NGM2NzU1ZjdlOGYyN2E2ZjU0ZjE5NzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjIxODQ1OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZkZDJmNTliMWE2YWE0NGVkMTZiNjQ0Y2ZlODFlMjdmh9dOWnzXTlo%3DNG; PHPSESSID=ph1fngr8r7esumvn9ru5i3ian7; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1515116350,1515116778; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1515117138; cvde=5a4ed8e8b70db-9&#8217;
</p>
<p>
  );
</p>
<p>
  curl_setopt($ch, CURLOPT_HTTPHEADER  , $header);
</p>
<p>
  curl_setopt($ch, CURLOPT_URL, &#8216;https://www.imooc.com/article/ajaxpublish&#8217;);
</p>
<p>
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  $postData = [
</p>
<p>
  	&#8216;label_ids&#8217; =&gt; 19,
</p>
<p>
  	&#8216;title&#8217; =&gt; &#8216;汉子怎么写，小编是不是女dsfsdfs的&#8217;,
</p>
<p>
  	&#8216;is_original&#8217; =&gt; 0,
</p>
<p>
  	&#8216;pic&#8217; =&gt; &#8221;,
</p>
<p>
  	&#8216;content&#8217; =&gt; &#8216;大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费大发的说法是打发斯蒂芬水电费&#8217;
</p>
<p>
  ];
</p>
<p>
  curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  // https请求 不验证证书和hosts
</p>
<p>
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
</p>
<p>
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
</p>
<p>
  //3.发送请求
</p>
<p>
  $rs = curl_exec($ch);
</p>
<p>
  //4.关闭释放
</p>
<p>
  curl_close($ch);
</p>
<p>
  echo $rs;
</p>
<h2><a id="post-6168-_Toc487990940"></a>3、防止CSRF攻击</h2>
<ul>
<li>
    防止方案：通过session过滤
  </li>
<li>
    步骤1：控制器打开视图时候,生成随意唯一的字符串保存在session中的token键中
  </li>
</ul>
<p>
  【控制器（伪代码）】
</p>
<p>
  session_start()
</p>
<p>
  $_SESSION[&#8216;token&#8217;] = 随机字符串
</p>
<p>
  return view();
</p>
<p>
  【视图中】
</p>
<p>
  表单隐藏域
</p>
<p>
  &lt;input type=&#8221;hidden&#8221; value=&#8221;{{$_SESSION[&#8216;token&#8217;]}}&#8221; name=&#8221;token&#8221; /&gt;
</p>
<ul>
<li>
    步骤2：验证表单提交的随机字符串和session中的是否一致
  </li>
</ul>
<p>
  session_start();
</p>
<p>
  if ($_SESSION[&#8216;token&#8217;] !== $_POST[&#8216;token&#8217;]) {
</p>
<p>
  非法操作
</p>
<p>
  }
</p>
<h2><a id="post-6168-_Toc487990939"></a>Laravel中避免CSRF攻击（留言板案例）</h2>
<p>
  步骤1：打开app\Http\Kernel.php核心文件开启cstf攻击（注：默认已经开启）
</p>
<p><img loading="lazy" decoding="async" width="1075" height="416" src="/wp-content/uploads/2018/05/word-image-5616.png" class="wp-image-6170" srcset="/wp-content/uploads/2018/05/word-image-5616.png 1075w, /wp-content/uploads/2018/05/word-image-5616-300x116.png 300w, /wp-content/uploads/2018/05/word-image-5616-768x297.png 768w, /wp-content/uploads/2018/05/word-image-5616-1024x396.png 1024w" sizes="(max-width: 1075px) 100vw, 1075px" /></p>
<p>
  步骤2：后期所有post提交的表单都必须增加_token键
</p>
<p><img loading="lazy" decoding="async" width="963" height="371" src="/wp-content/uploads/2018/05/word-image-5617.png" class="wp-image-6171" srcset="/wp-content/uploads/2018/05/word-image-5617.png 963w, /wp-content/uploads/2018/05/word-image-5617-300x116.png 300w, /wp-content/uploads/2018/05/word-image-5617-768x296.png 768w" sizes="(max-width: 963px) 100vw, 963px" /></p>
<p>
  了解更多：<a href="http://laravelacademy.org/post/6742.html">http://laravelacademy.org/post/6742.html</a>
</p>
<h1>二、操作提示功能：Laravel 的闪存数据（Flash Data）</h1>
<h2>1、概念</h2>
<p>
  简单概括：闪存数据指将数据存在session中并且只能读取一次
</p>
<p><img loading="lazy" decoding="async" width="825" height="336" src="/wp-content/uploads/2018/05/word-image-5618.png" class="wp-image-6172" srcset="/wp-content/uploads/2018/05/word-image-5618.png 825w, /wp-content/uploads/2018/05/word-image-5618-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5618-768x313.png 768w" sizes="(max-width: 825px) 100vw, 825px" /></p>
<h2>留言板案例（数据插入状态弹框提示）</h2>
<p>
  控制器
</p>
<p><img loading="lazy" decoding="async" width="1259" height="550" src="/wp-content/uploads/2018/05/word-image-5619.png" class="wp-image-6173" srcset="/wp-content/uploads/2018/05/word-image-5619.png 1259w, /wp-content/uploads/2018/05/word-image-5619-300x131.png 300w, /wp-content/uploads/2018/05/word-image-5619-768x336.png 768w, /wp-content/uploads/2018/05/word-image-5619-1024x447.png 1024w" sizes="(max-width: 1259px) 100vw, 1259px" /></p>
<p>
  视图
</p>
<p><img loading="lazy" decoding="async" width="977" height="421" src="/wp-content/uploads/2018/05/word-image-5620.png" class="wp-image-6174" srcset="/wp-content/uploads/2018/05/word-image-5620.png 977w, /wp-content/uploads/2018/05/word-image-5620-300x129.png 300w, /wp-content/uploads/2018/05/word-image-5620-768x331.png 768w" sizes="(max-width: 977px) 100vw, 977px" /></p>
<p>
  概况
</p>
<p><img loading="lazy" decoding="async" width="868" height="270" src="/wp-content/uploads/2018/05/word-image-5621.png" class="wp-image-6175" srcset="/wp-content/uploads/2018/05/word-image-5621.png 868w, /wp-content/uploads/2018/05/word-image-5621-300x93.png 300w, /wp-content/uploads/2018/05/word-image-5621-768x239.png 768w" sizes="(max-width: 868px) 100vw, 868px" /></p>
<p>
  with（键，值）   						=&gt; 相当于 $_SESSION[&#8216;键&#8217;] = 值
</p>
<p>
  with（[键=&gt;值,..,键n=&gt;值n]）		=&gt; 相当于批量设置
</p>
<p>
  						 				$_SESSION[&#8216;键1&#8217;] = 值1
</p>
<p>
  						 				&#8230;
</p>
<p>
  						 				$_SESSION[&#8216;键n&#8217;] = 值n
</p>
<p>
  以前PHP存储到session中，通过$_SESSION[&#8216;键&#8217;]来获取
</p>
<p>
  问：在Laravel中如何获取？
</p>
<p>
  答：通过session函数，语法：echo session（键）
</p>
<h2>留言板案例（优雅的弹框）</h2>
<h3>1）插件</h3>
<p>
  layer插件（闲心）
</p>
<p>
  网站：<a href="http://layer.layui.com/">http://layer.layui.com/</a>
</p>
<p>
  手册：<a href="http://layer.layui.com/hello.html">http://layer.layui.com/hello.html</a>
</p>
<p>
  sweet alert插件
</p>
<p>
  网站：<a href="http://mishengqiang.com/sweetalert/" class="broken_link">http://mishengqiang.com/sweetalert/</a>
</p>
<p>
  laravel的sweet alert版本：<a href="https://github.com/uxweb/sweet-alert">https://github.com/uxweb/sweet-alert</a>
</p>
<h3>使用</h3>
<p><img loading="lazy" decoding="async" width="1145" height="544" src="/wp-content/uploads/2018/05/word-image-5622.png" class="wp-image-6176" srcset="/wp-content/uploads/2018/05/word-image-5622.png 1145w, /wp-content/uploads/2018/05/word-image-5622-300x143.png 300w, /wp-content/uploads/2018/05/word-image-5622-768x365.png 768w, /wp-content/uploads/2018/05/word-image-5622-1024x487.png 1024w" sizes="(max-width: 1145px) 100vw, 1145px" /></p>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
      &lt;title&gt;&lt;/title&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
      &lt;!&#8211;
</p>
<p>
      http://mishengqiang.com/sweetalert/
</p>
<p>
      &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
      .sweet-alert h2 { line-height: 1px !important }
</p>
<p>
      &lt;/style&gt;
</p>
<p>
      &#8211;&gt;
</p>
<p>
      &lt;link href=&#8221;https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css&#8221; rel=&#8221;stylesheet&#8221;&gt;
</p>
<p>
      &lt;script src=&#8221;https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert-dev.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
      &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
      swal(&#8220;大标题&#8221;, &#8220;&#8221;,&#8221;error&#8221;)
</p>
<p>
      &lt;/script&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<h3>留言板整合</h3>
<p>
  控制机器
</p>
<p><img loading="lazy" decoding="async" width="1353" height="491" src="/wp-content/uploads/2018/05/word-image-5623.png" class="wp-image-6177" srcset="/wp-content/uploads/2018/05/word-image-5623.png 1353w, /wp-content/uploads/2018/05/word-image-5623-300x109.png 300w, /wp-content/uploads/2018/05/word-image-5623-768x279.png 768w, /wp-content/uploads/2018/05/word-image-5623-1024x372.png 1024w" sizes="(max-width: 1353px) 100vw, 1353px" /></p>
<p>
  视图
</p>
<p><img loading="lazy" decoding="async" width="1283" height="521" src="/wp-content/uploads/2018/05/word-image-5624.png" class="wp-image-6178" srcset="/wp-content/uploads/2018/05/word-image-5624.png 1283w, /wp-content/uploads/2018/05/word-image-5624-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5624-768x312.png 768w, /wp-content/uploads/2018/05/word-image-5624-1024x416.png 1024w" sizes="(max-width: 1283px) 100vw, 1283px" /></p>
<p>
  &lt;link href=&#8221;https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css&#8221; rel=&#8221;stylesheet&#8221;&gt;
</p>
<p>
  &lt;script src=&#8221;https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert-dev.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  	{{&#8211;@if (session(&#8216;tips&#8217;))&#8211;}}
</p>
<p>
  		{{&#8211;alert(&#8220;{{ session(&#8216;tips&#8217;) }}&#8221;);&#8211;}}
</p>
<p>
  	{{&#8211;@endif&#8211;}}
</p>
<p>
  	@if (session(&#8216;tips&#8217;))
</p>
<p>
      swal(&#8220;{{session(&#8216;tips&#8217;)}}&#8221;, &#8220;&#8221;,&#8221;{{session(&#8216;state&#8217;)}}&#8221;);
</p>
<p>
  	@endif
</p>
<p>
  &lt;/script&gt;
</p>
<h1>︴数据库操作学前扩展（foreach遍历Laravel集合对象，会将其属性中的对象赋给 $v）</h1>
<p>
  &lt;?php
</p>
<p>
  //以前：从数据库查询处理，是个二维数组
</p>
<p>
  // $arrData = [
</p>
<p>
  // 	[&#8216;name&#8217;=&gt;&#8217;xx&#8217;, &#8216;age&#8217;=&gt;19],
</p>
<p>
  // 	[&#8216;name&#8217;=&gt;&#8217;xx&#8217;, &#8216;age&#8217;=&gt;19],
</p>
<p>
  // 	[&#8216;name&#8217;=&gt;&#8217;xx&#8217;, &#8216;age&#8217;=&gt;19],
</p>
<p>
  // 	[&#8216;name&#8217;=&gt;&#8217;xx&#8217;, &#8216;age&#8217;=&gt;19]
</p>
<p>
  // ];
</p>
<p>
  // foreach ($arrData as $key =&gt; $arr) {
</p>
<p>
  // 	#$arr就是数据库的一条条记录， [&#8216;name&#8217;=&gt;&#8217;xx&#8217;, &#8216;age&#8217;=&gt;19]
</p>
<p>
  // 	#$arr[&#8216;name&#8217;]   和  $arr[&#8216;age&#8217;]
</p>
<p>
  // }
</p>
<p>
  //&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
</p>
<p>
  //现在：laravel不同（小对象对应数据库的每一条记录）
</p>
<p>
  // 大对象
</p>
<p>
  // {
</p>
<p>
  // 	属性名:受保护 =&gt; array(
</p>
<p>
  // 		0 =&gt; 小对象,
</p>
<p>
  // 		1 =&gt; 小对象,
</p>
<p>
  // 		2 =&gt; 小对象
</p>
<p>
  // 	)
</p>
<p>
  // }
</p>
<p>
  //======================
</p>
<p>
  //【小栗子】定义学生类
</p>
<p>
  // class Stu
</p>
<p>
  // {
</p>
<p>
  // 	public $a = &#8216;a1&#8217;;
</p>
<p>
  // 	public $b = &#8216;b2&#8217;;
</p>
<p>
  // 	protected $c = &#8216;c3&#8217;;
</p>
<p>
  // 	public function d() {}
</p>
<p>
  // }
</p>
<p>
  // //创建对象
</p>
<p>
  // $stuObj = new Stu;
</p>
<p>
  // foreach ($stuObj as $key =&gt; $v) {
</p>
<p>
  // 	print_r($key);
</p>
<p>
  // 	print_r($v);
</p>
<p>
  // 	echo &#8216;&lt;hr /&gt;&#8217;; //【结论】只有公开的属性才可以
</p>
<p>
  // }
</p>
<p>
  //&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
</p>
<p><strong>class smallObj </strong>
</p>
<p><strong>{</strong>
</p>
<p><strong>	public $name = &#8216;h&#8217;;</strong>
</p>
<p><strong>	public $age = &#8216;hh&#8217;;</strong>
</p>
<p><strong>}</strong>
</p>
<p><strong>class Stu implements IteratorAggregate </strong>
</p>
<p><strong>{</strong>
</p>
<p><strong>	protected $items;</strong>
</p>
<p><strong>	public function __construct()</strong>
</p>
<p><strong>	{</strong>
</p>
<p><strong>		$this-&gt;items = array(</strong>
</p>
<p><strong>			new smallObj,</strong>
</p>
<p><strong>			new smallObj,</strong>
</p>
<p><strong>			new smallObj</strong>
</p>
<p><strong>		);</strong>
</p>
<p><strong>	}</strong>
</p>
<p><strong>	//说明：实现IteratorAggregate接口里面的抽象方法</strong>
</p>
<p><strong>	//触发：当foreach时候触发</strong>
</p>
<p><strong>    public function getIterator() {</strong>
</p>
<p><strong>    		   //通过ArrayIterator迭代器遍历$this-&gt;items挨个返回给$v</strong>
</p>
<p><strong>        return new ArrayIterator($this-&gt;items);//通过ArrayIterator迭代器过滤items属性</strong>
</p>
<p><strong>    }</strong>
</p>
<p><strong>}</strong>
</p>
<p><strong>//创建对象</strong>
</p>
<p><strong>$stuObj = new Stu;</strong>
</p>
<p><strong>echo &#8216;&lt;pre&gt;&#8217;;</strong>
</p>
<p><strong>// print_r($stuObj);</strong>
</p>
<p><strong>foreach ($stuObj as $key =&gt; $v) {</strong>
</p>
<p><strong>	print_r($v);</strong>
</p>
<p><strong>}</strong>
</p>
<p><img loading="lazy" decoding="async" width="1116" height="248" src="/wp-content/uploads/2018/05/word-image-5625.png" class="wp-image-6179" srcset="/wp-content/uploads/2018/05/word-image-5625.png 1116w, /wp-content/uploads/2018/05/word-image-5625-300x67.png 300w, /wp-content/uploads/2018/05/word-image-5625-768x171.png 768w, /wp-content/uploads/2018/05/word-image-5625-1024x228.png 1024w" sizes="(max-width: 1116px) 100vw, 1116px" /></p>
<h1>三、Laravel数据库操作</h1>
<h2>1、说明</h2>
<p>
  按照MVC架构理论上数据操作应该在模型中（Model）完成，但对于某些极其复杂的SQL语句，可以使用DB类来操作数据库。
</p>
<h2>2、操作数据库的三种方式（★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★）</h2>
<ul>
<li>
    使用模型操作（Eloquent ORM）
  </li>
<li>
    使用原生SQL语句，语法：DB::CURD（SQL语句）
  </li>
<li>
    使用查询构建器，语法：DB::table（表名）
  </li>
</ul>
<p>
  模型Eloquent ORM  相当于TP    D方法
</p>
<p>
  查询构建器           相当于TP     M方法
</p>
<p>
  多学一招：实际工作使用M还是D呢？
</p>
<p>
  答：模型，因为减少冗余、增加代码可读性便于维护
</p>
<h2>3、准备，操作数据库（数据表的创建与配置）</h2>
<h3>1）创建数据库和表</h3>
<p>
  create database laravel54;
</p>
<p>
  use laravel54;
</p>
<p>
  create table day2_t1(
</p>
<p>
  id int primary key auto_increment comment &#8216;编号&#8217;,
</p>
<p>
  uname varchar(45) not null comment &#8216;用户名&#8217;,
</p>
<p>
  content text not null comment &#8216;内容&#8217;,
</p>
<p>
  created_at int not null default 0 comment &#8216;创建于&#8217;,
</p>
<p>
  updated_at int not null default 0 comment &#8216;更新于&#8217;
</p>
<p>
  )engine=myisam charset=utf8;
</p>
<h3>2）数据库在laravel框架中的配置（更改数据库配置文件）</h3>
<p><img loading="lazy" decoding="async" width="674" height="340" src="/wp-content/uploads/2018/05/word-image-5626.png" class="wp-image-6180" srcset="/wp-content/uploads/2018/05/word-image-5626.png 674w, /wp-content/uploads/2018/05/word-image-5626-300x151.png 300w" sizes="(max-width: 674px) 100vw, 674px" /></p>
<h3>3）创建一个Day2Controller.php的控制器</h3>
<p>
  php artisan make:controller Home\Day2Controller
</p>
<h3>3）设计路由规则</h3>
<p><img loading="lazy" decoding="async" width="1055" height="413" src="/wp-content/uploads/2018/05/word-image-5627.png" class="wp-image-6181" srcset="/wp-content/uploads/2018/05/word-image-5627.png 1055w, /wp-content/uploads/2018/05/word-image-5627-300x117.png 300w, /wp-content/uploads/2018/05/word-image-5627-768x301.png 768w, /wp-content/uploads/2018/05/word-image-5627-1024x401.png 1024w" sizes="(max-width: 1055px) 100vw, 1055px" /></p>
<p>
  Route::get(&#8216;/db&#8217;, &#8216;Home\Day2Controller@db&#8217;);
</p>
<h1>四、DB类操作数据库（查询构建器、原始SQL语句）</h1>
<h2><a id="post-6168-_Toc487903168"></a>1、【C】增加数据（insert）</h2>
<h3>语法</h3>
<ul>
<li>
    【  插入多条数据】DB::table（表名）-&gt;insert（数组）
  </li>
<li>
    【插入一条反主键】DB::table（表名）-&gt;insertGetId（数组）
  </li>
</ul>
<h3>2）练习</h3>
<p>
  //【返回状态】插入数据（一条）
</p>
<p>
  //【返回状态】插入数据（多条）
</p>
<p>
  //【返回主键】插入数据（仅能插入一条）
</p>
<p><img loading="lazy" decoding="async" width="837" height="650" src="/wp-content/uploads/2018/05/word-image-5628.png" class="wp-image-6182" srcset="/wp-content/uploads/2018/05/word-image-5628.png 837w, /wp-content/uploads/2018/05/word-image-5628-300x233.png 300w, /wp-content/uploads/2018/05/word-image-5628-768x596.png 768w" sizes="(max-width: 837px) 100vw, 837px" /></p>
<p>
  //学习数据库测试方法
</p>
<p>
  public function db()
</p>
<p>
  {
</p>
<p>
      //【返回状态】插入数据（一条）
</p>
<p>
  //        $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;insert([
</p>
<p>
  //            &#8216;uname&#8217; =&gt; &#8216;dsfsdaf&#8217;,
</p>
<p>
  //            &#8216;content&#8217; =&gt; &#8216;aaaaaa&#8217;,
</p>
<p>
  //            &#8216;created_at&#8217; =&gt; time(),
</p>
<p>
  //            &#8216;updated_at&#8217; =&gt; time()
</p>
<p>
  //        ]);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
      //【返回状态】插入数据（多条）
</p>
<p>
  //        $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;insert([
</p>
<p>
  //            [&#8216;uname&#8217; =&gt; &#8216;dsfsdaf&#8217;, &#8216;content&#8217; =&gt; &#8216;aaaaaa&#8217;],
</p>
<p>
  //            [&#8216;uname&#8217; =&gt; &#8216;dsfsdaf&#8217;, &#8216;content&#8217; =&gt; &#8216;aaaaaa&#8217;]
</p>
<p>
  //        ]);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
      //【返回主键】插入数据（仅能插入一条）
</p>
<p>
      $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;insertGetId([
</p>
<p>
          &#8216;uname&#8217; =&gt; &#8216;dsfsdaf&#8217;,
</p>
<p>
          &#8216;content&#8217; =&gt; &#8216;aaaaaa&#8217;,
</p>
<p>
          &#8216;created_at&#8217; =&gt; time(),
</p>
<p>
          &#8216;updated_at&#8217; =&gt; time()
</p>
<p>
      ]);
</p>
<p>
      var_dump($rs);
</p>
<p>
  }
</p>
<h2><a id="post-6168-_Toc487903177"></a>【D】删除数据(delete)</h2>
<h3>1）语法</h3>
<ul>
<li>
    【删除一条】DB::table（表名）-&gt;delete（主键）
  </li>
<li>
    【删除多条】DB::table（表名）-&gt;where（字段名，条件，值）-&gt;delete（）
  </li>
</ul>
<h3>2）练习</h3>
<p><img loading="lazy" decoding="async" width="1038" height="456" src="/wp-content/uploads/2018/05/word-image-5629.png" class="wp-image-6183" srcset="/wp-content/uploads/2018/05/word-image-5629.png 1038w, /wp-content/uploads/2018/05/word-image-5629-300x132.png 300w, /wp-content/uploads/2018/05/word-image-5629-768x337.png 768w, /wp-content/uploads/2018/05/word-image-5629-1024x450.png 1024w" sizes="(max-width: 1038px) 100vw, 1038px" /></p>
<p>
      //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          //【删除一条】
</p>
<p>
  //        $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;delete(1);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
          //【删除多条】
</p>
<p>
          $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;, &#8216;&lt;&#8216;, 5)-&gt;delete();
</p>
<p>
          var_dump($rs);
</p>
<p>
      }
</p>
<h2><a id="post-6168-_Toc487903169"></a>【U】修改数据( update)</h2>
<h3>1）语法</h3>
<ul>
<li>
    【修改多条】DB::table（表名）-&gt;update（数组）
  </li>
<li>
    【修改指定】DB::table（表名）-&gt;where（字段名，条件，值）-&gt;update（数组）
  </li>
<li>
    【递增】DB::table（表名）-&gt;increment（字段名 [,数字默认1]）
  </li>
<li>
    【递减】DB::table（表名）-&gt;decrement（字段名 [,数字默认1]）
  </li>
</ul>
<h3>2）练习</h3>
<p><img loading="lazy" decoding="async" width="1276" height="567" src="/wp-content/uploads/2018/05/word-image-5630.png" class="wp-image-6184" srcset="/wp-content/uploads/2018/05/word-image-5630.png 1276w, /wp-content/uploads/2018/05/word-image-5630-300x133.png 300w, /wp-content/uploads/2018/05/word-image-5630-768x341.png 768w, /wp-content/uploads/2018/05/word-image-5630-1024x455.png 1024w" sizes="(max-width: 1276px) 100vw, 1276px" /></p>
<p>
      //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          #需求：将id=6的name改成六六六
</p>
<p>
  //        $rs = DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;,6)-&gt;update([
</p>
<p>
  //            &#8216;uname&#8217; =&gt; &#8216;六六六&#8217;
</p>
<p>
  //        ]);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
          //脚下留心：php操作数据库特性如果数据已经修改，没有改变则影响0行，至此推荐修改数据的时候加上updated_at字段
</p>
<p>
  //        DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;,6)-&gt;increment(&#8216;created_at&#8217;);
</p>
<p>
  //        DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;,6)-&gt;increment(&#8216;created_at&#8217;, 4);
</p>
<p>
          DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;,6)-&gt;decrement(&#8216;created_at&#8217;);
</p>
<p>
          DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;,6)-&gt;decrement(&#8216;created_at&#8217;, 4);
</p>
<p>
      }
</p>
<h2><a id="post-6168-_Toc487903170"></a>4、【R】查询数据(get)</h2>
<h3>1）语法</h3>
<p>
  DB::table(表名)
</p>
<p>
  -&gt;select(字段名1,..,字段名n)  显示自定的字段 （注：字段名 as 别名）
</p>
<p>
  -&gt;where（字段名，条件，值）    多学一招：如果是等于忽略条件，语法：-&gt;where（字段名，值）
</p>
<p>
                                  多学一招：-&gt;where（[字段名=&gt;值，字段名=&gt;值]）
</p>
<p>
  -&gt;orderBy(字段名，升序或降序)
</p>
<p>
  -&gt;groupBy（字段名）			 注：多个则数组
</p>
<p>
  -&gt;having（同where）
</p>
<p>
  -&gt;skip（数字）  跳过多少条
</p>
<p>
  -&gt;take（数字）  获取多少条
</p>
<p>
  或
</p>
<p>
  -&gt;offset（数字）
</p>
<p>
  -&gt;limit（数字）
</p>
<p>
  -&gt;get()      查询所有数据
</p>
<p>
  -&gt;first()    查询一条数据
</p>
<p>
  并且where条件语法：-&gt;where()-&gt;where()
</p>
<p>
  或者where条件语法：-&gt;where()-&gt;orWhere()      参数统一两个或三个
</p>
<h3><a id="post-6168-_Toc487903171"></a>练习1</h3>
<ul>
<li>
    #插入测试数据
  </li>
</ul>
<p>
  INSERT INTO `day2_t1`
</p>
<p>
  VALUES
</p>
<p>
  (&#8216;1&#8217;, &#8216;aa&#8217;, &#8216;aaaa&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;2&#8217;, &#8216;bb&#8217;, &#8216;dfasf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;3&#8217;, &#8216;cc&#8217;, &#8216;sdf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;4&#8217;, &#8216;dd&#8217;, &#8216;asdf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;5&#8217;, &#8216;ee&#8217;, &#8216;asd&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;6&#8217;, &#8216;ff&#8217;, &#8216;adsfasdf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;7&#8217;, &#8216;ff&#8217;, &#8216;dsf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;8&#8217;, &#8216;h&#8217;, &#8216;asdf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8216;9&#8217;, &#8216;i&#8217;, &#8216;asf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;10&#8217;, &#8216;g&#8217;, &#8216;gsdfg&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;11&#8217;, &#8216;k&#8217;, &#8216;dfdf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;12&#8217;, &#8216;l&#8217;, &#8216;dfgsdfg&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;13&#8217;, &#8216;m&#8217;, &#8216;g&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;14&#8217;, &#8216;n&#8217;, &#8216;dfg&#8217;, &#8216;0&#8217;, &#8216;0&#8217;),
</p>
<p>
  (&#8217;15&#8217;, &#8216;o&#8217;, &#8216;sfadsf&#8217;, &#8216;0&#8217;, &#8216;0&#8217;);
</p>
<ul>
<li>
    例题
  </li>
</ul>
<p>
  #题目1：查询一条数据
</p>
<p>
  #题目2：查询所有数据
</p>
<p>
  #题目3：按照id降序模糊查询content中含有a的数据，最终取2条
</p>
<p><img loading="lazy" decoding="async" width="1007" height="394" src="/wp-content/uploads/2018/05/word-image-5631.png" class="wp-image-6185" srcset="/wp-content/uploads/2018/05/word-image-5631.png 1007w, /wp-content/uploads/2018/05/word-image-5631-300x117.png 300w, /wp-content/uploads/2018/05/word-image-5631-768x300.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" /></p>
<p>
     //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
          #题目1：查询一条数据（直接小对象）
</p>
<p>
  //        $data = DB::table(&#8216;day2_t1&#8217;)-&gt;first();
</p>
<p>
  //        print_r($data);
</p>
<p>
  //        echo $data-&gt;content;
</p>
<p>
          #题目2：查询所有数据（大对象里小对象，如果foreach那么$v 小对象）
</p>
<p>
  //        $data = DB::table(&#8216;day2_t1&#8217;)-&gt;get();
</p>
<p>
  //        print_r($data);
</p>
<p>
          #题目3：按照id降序模糊查询content中含有a的数据，最终取2条
</p>
<p>
          $data = DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;content&#8217;, &#8216;like&#8217;, &#8216;%a%&#8217;)-&gt;orderBy(&#8216;id&#8217;, &#8216;desc&#8217;)-&gt;limit(2)-&gt;get();
</p>
<p>
          print_r($data);
</p>
<p>
      }
</p>
<h3><a id="post-6168-_Toc487903173"></a>3）练习2：where条件</h3>
<p>
  #题目1：查询id=1（方法一）
</p>
<p>
  #题目2：查询id=1（方法二）
</p>
<p>
  #题目3：查询id&gt;1
</p>
<p>
  #题目4：查询id=1并且name=aa
</p>
<p>
  #题目5：查询id=1或id=2
</p>
<p><img loading="lazy" decoding="async" width="667" height="555" src="/wp-content/uploads/2018/05/word-image-5632.png" class="wp-image-6186" srcset="/wp-content/uploads/2018/05/word-image-5632.png 667w, /wp-content/uploads/2018/05/word-image-5632-300x250.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></p>
<p>
  //学习数据库测试方法
</p>
<p>
  public function db()
</p>
<p>
  {
</p>
<p>
      echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
      #题目1：查询id=1（方法一）
</p>
<p>
  //        $data = DB::table(&#8220;day2_t1&#8221;)-&gt;where(&#8216;id&#8217;, 1)-&gt;get();
</p>
<p>
  //        print_r($data);
</p>
<p>
      #题目2：查询id=1（方法二）
</p>
<p>
  //        $data = DB::table(&#8220;day2_t1&#8221;)-&gt;where(&#8216;id&#8217;,&#8217;=&#8217;, 1)-&gt;get();
</p>
<p>
  //        print_r($data);
</p>
<p>
      #题目3：查询id&gt;1
</p>
<p>
  //        $data = DB::table(&#8220;day2_t1&#8221;)-&gt;where(&#8216;id&#8217;,&#8217;&gt;&#8217;, 1)-&gt;get();
</p>
<p>
  //        print_r($data);
</p>
<p>
      #题目4：查询id=1并且name=aa
</p>
<p>
      //$data = DB::table(&#8216;day2_t1&#8217;)-&gt;where(&#8216;id&#8217;,1)-&gt;where(&#8216;uname&#8217;,&#8217;aa&#8217;)-&gt;get();
</p>
<p>
  //        $data = DB::table(&#8216;day2_t1&#8217;)-&gt;where([&#8216;id&#8217;=&gt;1,&#8217;uname&#8217;=&gt;&#8217;aa&#8217;])-&gt;get();
</p>
<p>
  //        print_r($data);
</p>
<p>
      #题目5：查询id=1或id=2
</p>
<p>
      $data = DB::table(&#8216;day2_t1&#8217;)
</p>
<p>
          -&gt;where(&#8216;id&#8217;,1)
</p>
<p>
          -&gt;orWhere(&#8216;id&#8217;,2)
</p>
<p>
          -&gt;get();
</p>
<p>
      print_r($data);
</p>
<p>
  }
</p>
<h1><a id="post-6168-_Toc487903178"></a>五、执行任意的SQL语句（可忽略）</h1>
<h3>1）语法</h3>
<ul>
<li>
    DB::select（SQL语句）
  </li>
<li>
    DB::insert（SQL语句）
  </li>
<li>
    DB::update（SQL语句）
  </li>
<li>
    DB::delete（SQL语句）
  </li>
</ul>
<h3>2）练习</h3>
<p><img loading="lazy" decoding="async" width="930" height="441" src="/wp-content/uploads/2018/05/word-image-5633.png" class="wp-image-6187" srcset="/wp-content/uploads/2018/05/word-image-5633.png 930w, /wp-content/uploads/2018/05/word-image-5633-300x142.png 300w, /wp-content/uploads/2018/05/word-image-5633-768x364.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<p>
      //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  //        $data = DB::select(&#8216;select * from day2_t1&#8217;);
</p>
<p>
  //        print_r($data);
</p>
<p>
  //
</p>
<p>
  //        $rs = DB::update(&#8220;update day2_t1 set uname = &#8216;a111&#8217; where id = 1&#8221;);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
  //         $data = DB::insert(&#8220;insert into day2_t1 (uname,content) values (&#8216;aaa&#8217;, &#8216;bbbb&#8217;)&#8221;);
</p>
<p>
  //         var_dump($data);
</p>
<p>
      }
</p>
<h1><a id="post-6168-_Toc487990941"></a>模型使用（Eloquent ORM）</h1>
<h2>说明</h2>
<ul>
<li><strong>什么是ORM？</strong>
  </li>
</ul>
<p>
  ORM技术主要为了避免手工编写 SQL，直接在对象（Object，O）和关系型数据（Relation, R）之间进行转换（Mapping, M）。
</p>
<p>
  ORM的好处就是使得你的开发几乎不用接触到SQL语句。创建一张表，声明一个对应的类，然后你就只用和这个类的实例进行交互了，至于这个对象里的数据该怎么存储又该怎么获取，通通不用关心。
</p>
<ul>
<li><strong>什么是Eloquent ORM？</strong>
  </li>
</ul>
<p>
  Eloquent 是 Laravel 中实现ORM的一个名称
</p>
<p>
  大致规则
</p>
<p>
  PHP编写的类  	===  库.表
</p>
<p>
  类里面存在属性  ===  表.字段
</p>
<p>
  类的实例方法 	===  表的操作
</p>
<p>
  类的实例 	    ===  表.记录
</p>
<h2><a id="post-6168-_Toc487990942"></a>2、创建模型</h2>
<ul>
<li>
    语法：php artisan make:model Http\Model\模型名
  </li>
<li>
    说明：说明模型默认在app目录下，为了方便管理将其放到Model目录中
  </li>
<li>
    模型属性【★】
  </li>
</ul>
<p>
  #声明表名（必须，注：不写则默认标明复数）
</p>
<p>
  protected $table       =  表名 			#默认模型对应的表名就是类型（注：类名大写则下划线分割+s）
</p>
<p>
  #声明主键字段名（默认主键为id字段，后期调用find(1)，则条件是id=1）
</p>
<p>
  protected $primaryKey =  主键名称
</p>
<p>
  #可被批量赋值的属性（当模型通过create方法创建数据时则必须）
</p>
<p>
  protected $fillable   =  [字段1,&#8230;,字段n]
</p>
<p>
  #是否字段管理created_at和updated_at字段：是-true默认，false-否
</p>
<p>
  public $timestamps =  bool
</p>
<p>
  #必须，模型日期列的存储格式（unix时间戳存储）
</p>
<p>
  protected $dateFormat = &#8216;U&#8217;;
</p>
<p>
  注：更改时间戳名称（一般不改）
</p>
<p>
  const CREATED_AT = &#8216;creation_date&#8217;;
</p>
<p>
  const UPDATED_AT = &#8216;last_update&#8217;;
</p>
<h2><a id="post-6168-_Toc487990943"></a>2、初体验控制器调用模型（获取所有数据）</h2>
<p>
  步骤1：创建模型
</p>
<p><img loading="lazy" decoding="async" width="677" height="335" src="/wp-content/uploads/2018/05/word-image-5634.png" class="wp-image-6188" srcset="/wp-content/uploads/2018/05/word-image-5634.png 677w, /wp-content/uploads/2018/05/word-image-5634-300x148.png 300w" sizes="(max-width: 677px) 100vw, 677px" /></p>
<p>
  步骤2：控制器调用模型
</p>
<p><img loading="lazy" decoding="async" width="795" height="423" src="/wp-content/uploads/2018/05/word-image-5635.png" class="wp-image-6189" srcset="/wp-content/uploads/2018/05/word-image-5635.png 795w, /wp-content/uploads/2018/05/word-image-5635-300x160.png 300w, /wp-content/uploads/2018/05/word-image-5635-768x409.png 768w" sizes="(max-width: 795px) 100vw, 795px" /><br />
<img loading="lazy" decoding="async" width="786" height="598" src="/wp-content/uploads/2018/05/word-image-5636.png" class="wp-image-6190" srcset="/wp-content/uploads/2018/05/word-image-5636.png 786w, /wp-content/uploads/2018/05/word-image-5636-300x228.png 300w, /wp-content/uploads/2018/05/word-image-5636-768x584.png 768w" sizes="(max-width: 786px) 100vw, 786px" /></p>
<h2><a id="post-6168-_Toc487990944"></a>3、基本操作</h2>
<h3><a id="post-6168-_Toc487990945"></a>1）添加数据</h3>
<ul>
<li>
    语法
  </li>
<li>
    方法1：模型名::create（数组）
  </li>
<li>
    方法2：
  </li>
</ul>
<p>
  $模型名 = new 模型名;
</p>
<p>
  $模型名-&gt;字段名 = 值;
</p>
<p>
  &#8230;
</p>
<p>
  $模型名-&gt;字段名n = 值n;
</p>
<p>
  $模型名-&gt;save();
</p>
<ul>
<li>
    练习
  </li>
<li>
    方法2：
  </li>
</ul>
<p>
  模型
</p>
<p><img loading="lazy" decoding="async" width="1112" height="644" src="/wp-content/uploads/2018/05/word-image-5637.png" class="wp-image-6191" srcset="/wp-content/uploads/2018/05/word-image-5637.png 1112w, /wp-content/uploads/2018/05/word-image-5637-300x174.png 300w, /wp-content/uploads/2018/05/word-image-5637-768x445.png 768w, /wp-content/uploads/2018/05/word-image-5637-1024x593.png 1024w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<p>
  控制器
</p>
<p><img loading="lazy" decoding="async" width="914" height="642" src="/wp-content/uploads/2018/05/word-image-5638.png" class="wp-image-6192" srcset="/wp-content/uploads/2018/05/word-image-5638.png 914w, /wp-content/uploads/2018/05/word-image-5638-300x211.png 300w, /wp-content/uploads/2018/05/word-image-5638-768x539.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></p>
<p>
  脚下留心：
</p>
<p>
  1）使用create方法批量设置属性创建数据，必须在模型声明 $fillable属性
</p>
<p>
  2）模型默认托管创建于和更新于 并且 以字符串型插入，如果需要unix时间戳 得声明$dateformat属性
</p>
<ul>
<li>
    方法1：
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="629" height="562" src="/wp-content/uploads/2018/05/word-image-5639.png" class="wp-image-6193" srcset="/wp-content/uploads/2018/05/word-image-5639.png 629w, /wp-content/uploads/2018/05/word-image-5639-300x268.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></p>
<h3><a id="post-6168-_Toc487990946"></a>2）查询操作</h3>
<ul>
<li>
    语法
  </li>
</ul>
<p>
  模型名::下属任意一个方法()
</p>
<p>
  -&gt;select(字段名1,..,字段名n)  显示自定的字段 （注：字段名 as 别名）
</p>
<p>
  -&gt;where（字段名，条件，值）    多学一招：如果是等于忽略条件，语法：-&gt;where（字段名，值）
</p>
<p>
                                  多学一招：-&gt;where（[字段名=&gt;值，字段名=&gt;值]）
</p>
<p>
  -&gt;orderBy(字段名，升序或降序)
</p>
<p>
  -&gt;groupBy（字段名）			 注：多个则数组
</p>
<p>
  -&gt;having（同where）
</p>
<p>
  -&gt;skip（数字）  跳过多少条
</p>
<p>
  -&gt;take（数字）  获取多少条
</p>
<p>
  或
</p>
<p>
  -&gt;offset（数字）
</p>
<p>
  -&gt;limit（数字）
</p>
<p>
  -&gt;get()      查询所有数据
</p>
<p>
  -&gt;first()    查询一条数据
</p>
<p>
  并且where条件语法：-&gt;where()-&gt;where()
</p>
<p>
  或者where条件语法：-&gt;where()-&gt;orWhere()      参数统一两个或三个
</p>
<ul>
<li>
    练习
  </li>
</ul>
<p>
  #题目1：查询id=1（方法一）
</p>
<p>
  #题目2：查询id=1（方法二）
</p>
<p>
  #题目3：查询id&gt;1
</p>
<p>
  #题目4：查询id=1并且id=2
</p>
<p>
  #题目5：查询id=1或id=2
</p>
<p><img loading="lazy" decoding="async" width="445" height="546" src="/wp-content/uploads/2018/05/word-image-5640.png" class="wp-image-6194" srcset="/wp-content/uploads/2018/05/word-image-5640.png 445w, /wp-content/uploads/2018/05/word-image-5640-245x300.png 245w" sizes="(max-width: 445px) 100vw, 445px" /></p>
<p>
  //学习数据库测试方法
</p>
<p>
  public function db()
</p>
<p>
  {
</p>
<p>
      #题目1：查询id=1（方法一）
</p>
<p>
  //        $day2T1 = Day2T1::where(&#8216;id&#8217;, 1)-&gt;first();
</p>
<p>
  //        echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  //        print_r($day2T1);
</p>
<p>
  //        #题目2：查询id=1（方法二）
</p>
<p>
  //        $day2T1 = Day2T1::where(&#8216;id&#8217;,&#8217;=&#8217;, 1)-&gt;first();
</p>
<p>
  //        echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  //        print_r($day2T1);
</p>
<p>
      #题目3：查询id&gt;1
</p>
<p>
  //        $day2T1 = Day2T1::where(&#8216;id&#8217;,&#8217;&gt;&#8217;, 1)-&gt;get();
</p>
<p>
  //        echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  //        print_r($day2T1);
</p>
<p>
      #题目4：查询id=1并且id=2
</p>
<p>
  //        $day2T1 = Day2T1::where(&#8216;id&#8217;,&#8217;=&#8217;, 1)
</p>
<p>
  //            -&gt;where(&#8216;id&#8217;,&#8217;=&#8217;, 2)
</p>
<p>
  //            -&gt;get();
</p>
<p>
  //        var_dump($day2T1);
</p>
<p>
      #题目5：查询id=1或id=2
</p>
<p>
      $day2T1 = Day2T1::where(&#8216;id&#8217;,&#8217;=&#8217;, 1)
</p>
<p>
          -&gt;orWhere(&#8216;id&#8217;,&#8217;=&#8217;, 2)
</p>
<p>
          -&gt;get();
</p>
<p>
      echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
      print_r($day2T1);
</p>
<p>
  }
</p>
<h3><a id="post-6168-_Toc487990947"></a>3）修改数据</h3>
<ul>
<li>
    语法
  </li>
<li>
    方法1：模型名::where()-&gt;update（数组）
  </li>
<li>
    方法2：
  </li>
</ul>
<p>
  $模型名 = 模型名::find(主键)
</p>
<p>
  $模型名-&gt;字段名 = 修改值
</p>
<p>
  &#8230;.
</p>
<p>
  $模型名-&gt;save();
</p>
<p>
  模型中查询一条数据：find(主键)  或者 first
</p>
<p>
  模型中查询多条数据：get（）     或者 all()
</p>
<ul>
<li>
    练习
  </li>
</ul>
<p>
  #方法1：多条，返回受影响的行数
</p>
<p>
  #方法2：仅修改一条，返回bool($rs);
</p>
<p><img loading="lazy" decoding="async" width="677" height="468" src="/wp-content/uploads/2018/05/word-image-5641.png" class="wp-image-6195" srcset="/wp-content/uploads/2018/05/word-image-5641.png 677w, /wp-content/uploads/2018/05/word-image-5641-300x207.png 300w" sizes="(max-width: 677px) 100vw, 677px" /></p>
<p>
      //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          #方法1：多条，返回受影响的行数
</p>
<p>
  //        $rs = Day2T1::where(&#8216;id&#8217;, &#8216;&lt;&#8216;, 5)-&gt;update([
</p>
<p>
  //            &#8216;uname&#8217; =&gt; &#8216;a2&#8217;
</p>
<p>
  //        ]);
</p>
<p>
  //        var_dump($rs);
</p>
<p>
          #方法2：仅修改一条，返回bool($rs);
</p>
<p>
          $day2T1 = Day2T1::find(1);
</p>
<p>
          $day2T1-&gt;uname = &#8216;bbbb&#8217;;
</p>
<p>
          $day2T1-&gt;content = &#8216;ccccc&#8217;;
</p>
<p>
          $rs = $day2T1-&gt;save();
</p>
<p>
          var_dump($rs);
</p>
<p>
      }
</p>
<h3><a id="post-6168-_Toc487990948"></a>4）删除数据</h3>
<ul>
<li>
    语法
  </li>
<li>
    方法1：模型名::where（）-&gt;delete（）
  </li>
<li>
    方法2：
  </li>
</ul>
<p>
  $模型名 = 模型名::find(主键)
</p>
<p>
  $模型名-&gt;delete（）
</p>
<ul>
<li>
    练习
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="694" height="486" src="/wp-content/uploads/2018/05/word-image-5642.png" class="wp-image-6196" srcset="/wp-content/uploads/2018/05/word-image-5642.png 694w, /wp-content/uploads/2018/05/word-image-5642-300x210.png 300w" sizes="(max-width: 694px) 100vw, 694px" /></p>
<p>
      //学习数据库测试方法
</p>
<p>
      public function db()
</p>
<p>
      {
</p>
<p>
          $rs = Day2T1::destroy(12);
</p>
<p>
          var_dump($rs);die;
</p>
<p>
  //        $rs = Day2T1::where(&#8216;id&#8217;, &#8216;&lt;&#8216;, 6)-&gt;delete();
</p>
<p>
  //        var_dump($rs);
</p>
<p>
  //        $day2T1 = Day2T1::find(6);
</p>
<p>
  //        $rs = $day2T1-&gt;delete();
</p>
<p>
  //        var_dump($rs);
</p>
<p>
      }
</p>
<h1>︴将数据转化为数组（强烈不推荐使用）</h1>
<p><img loading="lazy" decoding="async" width="864" height="601" src="/wp-content/uploads/2018/05/word-image-5643.png" class="wp-image-6197" srcset="/wp-content/uploads/2018/05/word-image-5643.png 864w, /wp-content/uploads/2018/05/word-image-5643-300x209.png 300w, /wp-content/uploads/2018/05/word-image-5643-768x534.png 768w" sizes="(max-width: 864px) 100vw, 864px" /></p>
<p>
  //数据库练习
</p>
<p>
  public function db()
</p>
<p>
  {
</p>
<p>
      echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
      #DB first 不可以
</p>
<p>
  //       $day2 = DB::table(&#8216;day2_t1&#8217;)-&gt;first()-&gt;toArray();
</p>
<p>
  //       dd($day2);
</p>
<p>
      #DB get  可以，数组里面是小对象
</p>
<p>
  //        $day2 = DB::table(&#8216;day2_t1&#8217;)-&gt;get()-&gt;toArray();
</p>
<p>
  //        print_r($day2);
</p>
<p>
      #模型 first 可以，数组
</p>
<p>
  //        $day2 = Day2T1Model::first()-&gt;toArray();
</p>
<p>
  //        print_r($day2);
</p>
<p>
      #模型 get   可以，数组里面是数组
</p>
<p>
  //        $day2 = Day2T1Model::get()-&gt;toArray();
</p>
<p>
  //        print_r($day2);
</p>
<p>
      #为什么不推荐使用
</p>
<p>
  //        $day2 = Day2T1Model::where(&#8216;id&#8217;, 1)-&gt;first()-&gt;toArray();
</p>
<p>
  //        print_r($day2);
</p>
<p>
  //        if ($day2) {
</p>
<p>
  //            //进一步操作
</p>
<p>
  //        }
</p>
<p>
      #说明因为容易出现查询不到数据，转化报错  所以尽量不用
</p>
<p>
  }
</p>
<h1><a id="post-6168-_Toc487990950"></a>七、内置分页功能使用</h1>
<h2>1、说明</h2>
<p>
  项目百分百需要使用分页、为了让开发者更快速开发项目，Laravel提供了paginate方法
</p>
<h2>练习</h2>
<p>
  控制器
</p>
<p><img loading="lazy" decoding="async" width="908" height="482" src="/wp-content/uploads/2018/05/word-image-5644.png" class="wp-image-6198" srcset="/wp-content/uploads/2018/05/word-image-5644.png 908w, /wp-content/uploads/2018/05/word-image-5644-300x159.png 300w, /wp-content/uploads/2018/05/word-image-5644-768x408.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></p>
<p>
  视图
</p>
<p><img loading="lazy" decoding="async" width="613" height="377" src="/wp-content/uploads/2018/05/word-image-5645.png" class="wp-image-6199" srcset="/wp-content/uploads/2018/05/word-image-5645.png 613w, /wp-content/uploads/2018/05/word-image-5645-300x185.png 300w" sizes="(max-width: 613px) 100vw, 613px" /></p>
<p>
  @foreach ($data as $item)
</p>
<p>
      {{ $item-&gt;id }}
</p>
<p>
      {{ $item-&gt;uname }}
</p>
<p>
      &lt;br /&gt;
</p>
<p>
  @endforeach
</p>
<p>
  &lt;hr /&gt;
</p>
<p>
  {{ $data-&gt;links() }}
</p>
<h2>3、自定义分页样式（美化分页）</h2>
<p><a href="https://www.cnblogs.com/lamp01/p/6869762.html">https://www.cnblogs.com/lamp01/p/6869762.html</a>
</p>
<p>
  @foreach ($data as $item)
</p>
<p>
      {{ $item-&gt;id }}
</p>
<p>
      {{ $item-&gt;uname }}
</p>
<p>
      &lt;br /&gt;
</p>
<p>
  @endforeach
</p>
<p>
  &lt;hr /&gt;
</p>
<p>
  //CSS样式
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
      #pull_right{
</p>
<p>
          text-align:center;
</p>
<p>
      }
</p>
<p>
      .pull-right {
</p>
<p>
          /*float: left!important;*/
</p>
<p>
      }
</p>
<p>
      .pagination {
</p>
<p>
          display: inline-block;
</p>
<p>
          padding-left: 0;
</p>
<p>
          margin: 20px 0;
</p>
<p>
          border-radius: 4px;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; li {
</p>
<p>
          display: inline;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; li &gt; a,
</p>
<p>
      .pagination &gt; li &gt; span {
</p>
<p>
          position: relative;
</p>
<p>
          float: left;
</p>
<p>
          padding: 6px 12px;
</p>
<p>
          margin-left: -1px;
</p>
<p>
          line-height: 1.42857143;
</p>
<p>
          color: #428bca;
</p>
<p>
          text-decoration: none;
</p>
<p>
          background-color: #fff;
</p>
<p>
          border: 1px solid #ddd;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; li:first-child &gt; a,
</p>
<p>
      .pagination &gt; li:first-child &gt; span {
</p>
<p>
          margin-left: 0;
</p>
<p>
          border-top-left-radius: 4px;
</p>
<p>
          border-bottom-left-radius: 4px;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; li:last-child &gt; a,
</p>
<p>
      .pagination &gt; li:last-child &gt; span {
</p>
<p>
          border-top-right-radius: 4px;
</p>
<p>
          border-bottom-right-radius: 4px;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; li &gt; a:hover,
</p>
<p>
      .pagination &gt; li &gt; span:hover,
</p>
<p>
      .pagination &gt; li &gt; a:focus,
</p>
<p>
      .pagination &gt; li &gt; span:focus {
</p>
<p>
          color: #2a6496;
</p>
<p>
          background-color: #eee;
</p>
<p>
          border-color: #ddd;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; .active &gt; a,
</p>
<p>
      .pagination &gt; .active &gt; span,
</p>
<p>
      .pagination &gt; .active &gt; a:hover,
</p>
<p>
      .pagination &gt; .active &gt; span:hover,
</p>
<p>
      .pagination &gt; .active &gt; a:focus,
</p>
<p>
      .pagination &gt; .active &gt; span:focus {
</p>
<p>
          z-index: 2;
</p>
<p>
          color: #fff;
</p>
<p>
          cursor: default;
</p>
<p>
          background-color: #428bca;
</p>
<p>
          border-color: #428bca;
</p>
<p>
      }
</p>
<p>
      .pagination &gt; .disabled &gt; span,
</p>
<p>
      .pagination &gt; .disabled &gt; span:hover,
</p>
<p>
      .pagination &gt; .disabled &gt; span:focus,
</p>
<p>
      .pagination &gt; .disabled &gt; a,
</p>
<p>
      .pagination &gt; .disabled &gt; a:hover,
</p>
<p>
      .pagination &gt; .disabled &gt; a:focus {
</p>
<p>
          color: #777;
</p>
<p>
          cursor: not-allowed;
</p>
<p>
          background-color: #fff;
</p>
<p>
          border-color: #ddd;
</p>
<p>
      }
</p>
<p>
      .clear{
</p>
<p>
          clear: both;
</p>
<p>
      }
</p>
<p>
      li.active span {background: red !important;}
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  //blade模板展示
</p>
<p>
  &lt;div id=&#8221;pull_right&#8221;&gt;
</p>
<p>
      &lt;div class=&#8221;pull-right&#8221;&gt;
</p>
<p>
          {!! $data-&gt;links() !!}
</p>
<p>
      &lt;/div&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<h1>扩展任务</h1>
<ol>
<li>
  自定义错误页面，百度关键词：laravel自定义错误页面
</li>
<li>
  搜索功能
</li>
<li>
  通过jq日期插件   开始时间  结束时间（http://www.my97.net/demo/index.htm ）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="745" height="337" src="/wp-content/uploads/2018/05/word-image-5646.png" class="wp-image-6200" srcset="/wp-content/uploads/2018/05/word-image-5646.png 745w, /wp-content/uploads/2018/05/word-image-5646-300x136.png 300w" sizes="(max-width: 745px) 100vw, 745px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6168.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
