“
本文屬于基礎內容,看到的同學檢查一下自己的代碼有沒有出現同樣的問題
”
前言
小Q又帶著問題來了,今天的問題估計是大多數同志都會犯的問題。
是不是很自信,這有什么不知道的,不就是empty嘛!如果你是這樣認為的,那還是把文章簡單的看完哈!
“
這個問題的緣由就是對框架查詢數據庫返回的結果是什么類型不明確,知道了類型就是一個非常簡單的問題。
”
一、問題重現
數據庫很簡單就一張表user,這個表中沒有任何數據,就是一個空表。
然后使用thinkphp框架進行查詢這個表的數據
小Q給你三秒鐘思考,這里會返回什么值。要么返回暫無數據,要么返回用戶表的數據。
小Q毫不思索的說肯定會返回暫無數據,因為user表根本就沒有數據。
那么來看一下打印的結果是什么。
小Q睜大了眼睛看也沒有看到暫無數據四個字,而是返回了一空數組(暫且這么認為)。
“
這里是暫時認為這就是一個空數組,其實只是長得像數組罷了,真的數據結構是結果集。至于什么是結果集,就自行百度哈!
”
這個時候小Q懵了啊!怎么會這樣呢!在小Q強烈的要求下打印了date的數據
返回結果仍然還是一個空數組(暫且這樣認為)
那么判斷一個數組是否為空肯定得是empty()來進行判斷的,對吧!
小Q自信十足的點了點頭,這次肯定沒有問題,這種寫法我都寫了好幾年了,就是用empty來進行判斷的。
為了讓小Q看見骨灰盒在落淚,咔咔只能在對這個值進行一次是否為空的判斷。
代碼如下
小Q臉上洋溢著無比燦爛的笑容,我都不忍心去點擊請求按鈕。
無奈與小Q的期望,殘忍的按下了請求按鈕。
看到了上邊的返回結果,小Q臉上的笑容頓時戛然而止,隨之迎來的就是滿臉質疑的大臉盤子。
再一次的檢查了寫的判斷代碼是否有問題。
老夫縱橫沙場幾十年,復制粘貼,拿起鍵盤就是干的實力怎么可能會把這個代碼寫錯。
小Q終于坐不住了,笑嘻嘻的問,這是怎么回事啊!
終于要來到重點了,請繼續看怎么讓小Q明白這其中的道理的。
二、解決問題
此刻急需來檢測一下返回的這data到底是不是我們堅持認為的數組,接下來檢測一下。
于是拿起鍵盤敲了八下,那就是is_array這個函數。
再一次的發起請求
此時小Q的表情就是這樣的,這下是真的凌亂了
于是我不慌不忙的打開官網的文檔,給小Q看了一眼
官網明確的說明數據返回的結果就是數據集,而且在5.1的版本是直接默認的。
再繼續往下看,你會看到額外的方法都有什么,第一個認識不,是否為空。
小Q驚呆的說了一句,臥槽,不會是用這種方式進行判斷的吧!
是不是檢測一下就可以了。
小Q終于一把鼻涕一把淚的說,我以為我眼睛出問題了呢!
明明是空數據怎么就判斷不出來呢!長長的出了一口氣。
“
小Q一臉迷茫的看了我一眼,說了一句,自從使用了5.1框架后,所有的判斷都是這樣寫的。 小Q緊忙的著小跑了出去,只說了一句話,趕緊在線上沒有出現問題前把代碼修復好,要不我就下崗了。
”
解決了小Q 的問題, 接下來聊點其它的。
三、擴展
解決了小Q的問題就來聊點正經話題。
在上文中存在一個遺漏問題,那就是empty,在PHP中判斷數組是否為空就是使用的empty。
這一點小Q是堅定不移的認為是這個樣子的,那么這種用法在框架中還能用嗎?
那肯定是沒有問題的啊!看下圖
返回結果肯定跟預想的是一樣的,真理永遠都是真理。
四、總結
送給小Q的總結,精華總是那么的簡單。
雖然返回結果可以在數據庫的配置文件進行修改,但是咔咔是不建議修改的。
既然框架已經默認為結果集,那就使用結果結果集,如果非要使用數組那也是可以的。
經過小Q的這個問題,需要注意以下幾點問題。
-
使用find查詢時,如果結果為空返回結果是NULL,那么判斷可以使用!來進行判斷 -
使用select查詢時,如果結果為空,返回結果是一個空的結果集,可以使用結果集額外的函數toArray()進行轉換為數組,然后使用empty進行判斷。然而如果就使用結果集進行判斷的話就是$data->isEmpty()提供的函數進行判斷即可。
“
堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在偌大互聯網中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。
”