2017-07-24 33 views
0

我在一些我必須處理的舊PHP代碼中遇到以下問題。我的問題是,這兩個Ifs都需要嗎?換句話說,如果返回結果,它必須返回大於零的記錄,對嗎?反過來 - 如果$ 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 
} 
+0

如果結果爲false,則表示您的查詢無法執行 –

+0

當查詢因爲無效或其他原因而無法完成時,'$ result'爲'NULL'原因(服務器斷開連接,服務器磁盤已滿等) – axiac

+0

So $ result即使返回0個記錄也爲TRUE? – Chiwda

回答

2

是的,兩者都是必需的。

如果結果被返回,它必須返回大於零的記錄,對嗎?

錯誤。

如果你沒有得到結果,那麼你得到一個錯誤,你將不會有一個對象來讀取結果的數量。

可以從成功的請求中取回零行。

如果$ result是False,我能否假設沒有找到記錄?

嗯,是的。有點。這就是爲什麼if語句停止檢查結果爲False時是否有多行。

...但沒有獲取行,因爲出現錯誤與不讓行返回因爲沒有找到。

1

不,你不能假設這一點。如果嘗試執行查詢時出錯,則$conn->query()返回false。 A SELECT與任何行不匹配的查詢都不是錯誤。

錯誤包括查詢中的語法不正確或與數據庫服務器通信時出現問題。

1

docs;

失敗時返回FALSE。對於成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查詢,mysqli_query()將返回一個mysqli_result對象。對於 其他成功的查詢mysqli_query()將返回TRUE。

這意味着它將從根本上不會返回null。第一次檢查(if ($result)只是爲了確保一切正常,並且從數據庫中獲得了某種響應;第二次檢查是計算行數;得到結果並不意味着查詢實際返回數據,因爲可能

+0

那麼$ result的目的是什麼?我應該checkmysqli_error($ conn)而不是(僅)。 – Chiwda

相關問題