在PHP 中遇到錯誤「嘗試存取bool 類型值的陣列偏移」表示程式碼嘗試從非數組的值(在本例中為布林值)會擷取數組元素。
在提供的程式碼中,您將根據使用者的使用者名稱和電子郵件在資料庫中查詢使用者。收到結果後,您可以透過將資料庫回應與註冊表單中的輸入進行比較來檢查使用者名稱或電子郵件是否已存在。
但是,當資料庫查詢沒有傳回與條件相符的記錄時,就會發生錯誤。結果,$emailRes(和 $nameRes)變成布林值(false)而不是關聯數組。因此,存取 $emailRes['Email'] 會引發錯誤,因為您無法存取布林值的陣列偏移量。
檢查資料庫結果:
最簡單的解決方案是在嘗試存取$emailRes 陣列之前先檢查資料庫查詢是否傳回任何結果。
$emailRes = $query->fetch(PDO::FETCH_ASSOC); if ($emailRes) { // Proceed to use $emailRes }
提供預設值:
如果你不關心資料庫是否回傳任何內容,你可以提供一個預設值。
$emailRes = $query->fetch(PDO::FETCH_ASSOC); $email = $emailRes['Email'] ?? ''; // Default: empty string
替代方法:
A更好的做法是使用PDO 的rowCount() 或fetchColumn() 方法來檢查資料庫中是否存在行,避免資料庫中是否存在行,避免潛在的布爾結果。
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username"); $query->execute([':Username' => $name]); if ($query->fetchColumn()) { throw new \Exception("Username is already in use!"); }
透過檢查行數而不是獲取數據,您消除了接收布林結果的可能性,確保您不會遇到「布林值上的數組偏移」錯誤。
以上是為什麼我的 PHP 程式碼中出現「嘗試存取 bool 類型值的陣列偏移量」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!