[英]Multiple for-loops from one $result = $conn->query($query)
[英]can a result of $conn->query(…) be not null with 0 records
我在一些必須處理的舊PHP代碼中遇到了以下內容。 我的問題是,是否都需要這些條件? 換句話說,如果返回結果,它必須返回的記錄大於零,對嗎? 反過來說-如果$ result為False,我可以假定未找到任何記錄嗎?
$sql = "SELECT * FROM houses WHERE ownerphone=$pn";
$result = $conn->query($sql);
if ($result) {
$count = $result->num_rows;
if ($count > 0){
....Stuff happens here...
} else {
...What happens here?...
}
} else {
...Other Stuff happens here
}
是的,兩者都是必需的。
如果返回結果,它必須返回的記錄大於零,對嗎?
錯誤。
如果沒有得到結果,那么就會出錯,並且沒有對象可以讀取返回的結果數。
您可以從成功的請求中獲取零行。
如果$ result為False,我可以假定未找到任何記錄嗎?
嗯,是。 有點。 這就是為什么if
語句使您停止檢查結果是否為False的行數的原因。
…但是因為有錯誤而不要返回行與沒有因為找不到要返回行而不同。
不,你不能假設這一點。 如果嘗試執行查詢時出錯,則$conn->query()
返回false
。 與任何行都不匹配的SELECT
查詢不是錯誤。
錯誤包括查詢中語法錯誤或與數據庫服務器通信出現問題。
從文檔 ;
失敗時返回FALSE。 對於成功的SELECT,SHOW,DESCRIBE或EXPLAIN查詢,mysqli_query()將返回mysqli_result對象。 對於其他成功的查詢,mysqli_query()將返回TRUE。
這意味着它將基本不會返回null
。 第一個檢查( if ( $result )
只是為了確保一切順利,並且您從數據庫中得到了某種響應。第二個檢查是對您的行進行計數;獲得結果並不意味着查詢實際上返回了數據,因為您可能正在搜索不存在的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.