Cara Mengendalikan "Cuba mengakses array offset pada nilai jenis bool" Ralat Semasa Menyemak Kewujudan Pangkalan Data
Apabila cuba menyemak kewujudan rekod dalam pangkalan data, pembangun mungkin menghadapi ralat "Cuba mengakses tatasusunan mengimbangi nilai jenis bool". Ini biasanya berlaku apabila pertanyaan pangkalan data tidak mengembalikan hasil, menyebabkan nilai boolean palsu dikembalikan.
Mengatasi ralat ini memerlukan pengesahan sama ada sebarang rekod telah diambil daripada pangkalan data. Ini boleh dicapai dengan merangkum operasi pengambilan pangkalan data dalam pernyataan bersyarat yang menyemak kewujudannya.
$emailRes = $query->fetch(PDO::FETCH_ASSOC); if ($emailRes) { // Use $emailRes }
Sebagai alternatif, anda boleh menetapkan nilai lalai jika pangkalan data tidak mengembalikan apa-apa.
$emailRes = $query->fetch(PDO::FETCH_ASSOC); $email = $emailRes['Email'] ?? ''; // Default: empty string
Untuk menyemak kewujudan pangkalan data dengan betul menggunakan PDO, adalah disyorkan untuk menggunakan pendekatan berikut:
$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!"); }
Kaedah ini mengambil kiraan baris yang sepadan dan menilainya sebagai boolean, menghapuskan keperluan untuk perbandingan selanjutnya dalam PHP.
Untuk menyemak kewujudan sama ada nama pengguna atau e-mel dalam satu pertanyaan, perkara berikut boleh digunakan:
$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!"); }
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat \'Cuba mengakses tatasusunan mengimbangi pada nilai jenis bool\' dalam Pertanyaan Pangkalan Data PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!