為什麼我的 PHP 程式碼中出現「嘗試存取 bool 類型值的陣列偏移量」錯誤?

Mary-Kate Olsen
發布: 2024-11-18 02:19:02
原創
301 人瀏覽過

Why Am I Getting a

無法在PHP 中存取布林值的陣列偏移

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板