php验证返回值,老司机竟然在判断返回结果上翻车了(ThinkPHP)

本文属于基础内容,看到的同学检查一下自己的代码有没有出现同样的问题”

前言

小Q又带着问题来了,今天的问题估计是大多数同志都会犯的问题。

问题是在使用ThinkPHP时查询返回的结果判断是否为空。

是不是很自信,这有什么不知道的,不就是empty嘛!如果你是这样认为的,那还是把文章简单的看完哈!“

这个问题的缘由就是对框架查询数据库返回的结果是什么类型不明确,知道了类型就是一个非常简单的问题。”c6b46ec77ef78d45c491fe4ef1b0da65.png一笑泯恩仇

一、问题重现

数据库很简单就一张表user,这个表中没有任何数据,就是一个空表。5f497ae1638615bfe23e404d87a93201.png数据库

然后使用ThinkPHP框架进行查询这个表的数据d53967e191c7a0a76ecbebd39ca09463.png查询代码

小Q给你三秒钟思考,这里会返回什么值。要么返回暂无数据,要么返回用户表的数据。

小Q毫不思索的说肯定会返回暂无数据,因为user表根本就没有数据。

那么来看一下打印的结果是什么。

小Q睁大了眼睛看也没有看到暂无数据四个字,而是返回了一空数组(暂且这么认为)。“

这里是暂时认为这就是一个空数组,其实只是长得像数组罢了,真的数据结构是结果集。至于什么是结果集,就自行百度哈!”95939c0acbedc6cf959233bee0cefea3.png返回结果

这个时候小Q懵了啊!怎么会这样呢!在小Q强烈的要求下打印了date的数据6049514b97acee1effc7c72cf2ea4840.png希望不是你

返回结果仍然还是一个空数组(暂且这样认为)2b85ae72ee27eb2c160b9338bb5c50f6.png返回结果

那么判断一个数组是否为空肯定得是empty()来进行判断的,对吧!

小Q自信十足的点了点头,这次肯定没有问题,这种写法我都写了好几年了,就是用empty来进行判断的。460e8d5173be5d0115b2f02bbd4a7e86.png自信的你

为了让小Q看见骨灰盒在落泪,咔咔只能在对这个值进行一次是否为空的判断。

代码如下73adf1b60317ec556f5b016514ec02f9.png代码打印

小Q脸上洋溢着无比灿烂的笑容,我都不忍心去点击请求按钮。

无奈与小Q的期望,残忍的按下了请求按钮。b0e36d04efc68950cc0146eb18ad797d.png返回结果

看到了上边的返回结果,小Q脸上的笑容顿时戛然而止,随之迎来的就是满脸质疑的大脸盘子。16a962de3a45a546b19483d254412c35.png疑惑

再一次的检查了写的判断代码是否有问题。

老夫纵横沙场几十年,复制粘贴,拿起键盘就是干的实力怎么可能会把这个代码写错。

小Q终于坐不住了,笑嘻嘻的问,这是怎么回事啊!bf8612d353db38aff8229b250536eeeb.png小Q的笑容

终于要来到重点了,请继续看怎么让小Q明白这其中的道理的。

二、解决问题

此刻急需来检测一下返回的这data到底是不是我们坚持认为的数组,接下来检测一下。

于是拿起键盘敲了八下,那就是is_array这个函数。

再一次的发起请求7628d35c3b1e0864c0d385c14cb2af94.png打印结果

此时小Q的表情就是这样的,这下是真的凌乱了8993034d9b4ed215f6b98a62ebb9b7a5.png你以前不是这样子的

于是我不慌不忙的打开官网的文档,给小Q看了一眼

官网明确的说明数据返回的结果就是数据集,而且在5.1的版本是直接默认的。17afa15308a0add3d6131720236495b6.png官网文档

再继续往下看,你会看到额外的方法都有什么,第一个认识不,是否为空。

小Q惊呆的说了一句,卧槽,不会是用这种方式进行判断的吧!e0ea6a05722d5f0178b7a2d2a18a8265.png额外的方法

是不是检测一下就可以了。9bf501fca995581688b9e01700797188.png检测代码

小Q终于一把鼻涕一把泪的说,我以为我眼睛出问题了呢!

明明是空数据怎么就判断不出来呢!长长的出了一口气。ba898fe6d62573a9358f2b67e2c8cd78.png返回结果“

小Q一脸迷茫的看了我一眼,说了一句,自从使用了5.1框架后,所有的判断都是这样写的。

小Q紧忙的着小跑了出去,只说了一句话,赶紧在线上没有出现问题前把代码修复好,要不我就下岗了。

422305778c13a1cc9092f9833b8c00d6.png

解决了小Q 的问题, 接下来聊点其它的。

三、扩展

解决了小Q的问题就来聊点正经话题。

在上文中存在一个遗漏问题,那就是empty,在PHP中判断数组是否为空就是使用的empty。

这一点小Q是坚定不移的认为是这个样子的,那么这种用法在框架中还能用吗?

那肯定是没有问题的啊!看下图b5f6543a6aa05f977d7a43d900ff0553.png代码

返回结果肯定跟预想的是一样的,真理永远都是真理。bf042b0f1bedcfa6dc73efebf6144317.png返回结果

四、总结

送给小Q的总结,精华总是那么的简单。

虽然返回结果可以在数据库的配置文件进行修改,但是咔咔是不建议修改的。

既然框架已经默认为结果集,那就使用结果结果集,如果非要使用数组那也是可以的。

经过小Q的这个问题,需要注意以下几点问题。使用find查询时,如果结果为空返回结果是null,那么判断可以使用!来进行判断

使用select查询时,如果结果为空,返回结果是一个空的结果集,可以使用结果集额外的函数toArray()进行转换为数组,然后使用empty进行判断。然而如果就使用结果集进行判断的话就是$data->isEmpty()提供的函数进行判断即可。“

坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我是咔咔,下期见。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值