檢查資料庫存在時如何處理「嘗試存取bool 類型值的陣列偏移量」錯誤
嘗試檢查時當資料庫中存在記錄時,開發人員可能會遇到「嘗試存取bool 類型值的陣列偏移量」錯誤。當資料庫查詢沒有傳回結果時,通常會發生這種情況,導致傳回 false 的布林值。
解決此錯誤需要驗證是否從資料庫檢索了任何記錄。這可以透過將資料庫取得操作封裝在檢查其是否存在的條件語句中來實現。
$emailRes = $query->fetch(PDO::FETCH_ASSOC); if ($emailRes) { // Use $emailRes }
或者,如果資料庫沒有回傳任何內容,您可以指派一個預設值。
$emailRes = $query->fetch(PDO::FETCH_ASSOC); $email = $emailRes['Email'] ?? ''; // Default: empty string
要使用PDO 正確檢查資料庫是否存在,建議使用以下方法:
$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!"); } $query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Email =:Email"); $query->execute([':Email' => $email]); if ($query->fetchColumn()) { throw new \Exception("Email is already in use!"); }
此方法獲取匹配行的計數並將其計算為布林值,從而無需在PHP 中進行進一步比較。
要檢查單一查詢中是否有使用者名稱或電子郵件,可以使用下列指令:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username =:Username OR Email =:Email"); $query->execute([':Username' => $name, ':Email' => $email]); if ($query->fetchColumn()) { throw new \Exception("Username or email is already in use!"); }
以上是如何避免 PHP 資料庫查詢中的「嘗試存取 bool 類型值的陣列偏移量」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!