Ralat "Mencuba untuk Mengakses Array Offset pada Nilai Jenis Bool" Ralat dalam PHP
Ralat "Mencuba mengakses array mengimbangi pada nilai type bool" berlaku apabila anda cuba mengakses elemen tatasusunan yang tidak wujud atau jenis tidak sah, khususnya boolean.
Dalam coretan kod yang disediakan, anda sedang melaksanakan pertanyaan untuk menyemak jika nama pengguna atau e-mel sudah wujud dalam pangkalan data. Jika pertanyaan tidak mengembalikan sebarang hasil, ia memberikan palsu kepada pembolehubah yang sepadan ($emailRes atau $nameRes).
Apabila anda kemudian cuba mengakses kekunci Nama Pengguna atau E-mel $nameRes atau $emailRes, anda dapatkan ralat kerana kedua-duanya adalah boolean, bukan tatasusunan.
Penyelesaian:
1. Semak Kewujudan:
Sebelum mengakses offset tatasusunan, semak sama ada pangkalan data mengembalikan sebarang hasil:
$emailRes = $query->fetch(PDO::FETCH_ASSOC); if ($emailRes) { // Proceed to use $emailRes['Email'] }
2. Berikan Nilai Lalai:
Jika anda tidak peduli sama ada pangkalan data mengembalikan apa-apa, anda boleh menetapkan nilai lalai:
$emailRes = $query->fetch(PDO::FETCH_ASSOC); $email = $emailRes['Email'] ?? ''; // Default to empty string
3. Gunakan fetchColumn() PDO untuk Semakan Kewujudan:
Cara yang lebih cekap untuk menyemak kewujudan dalam pangkalan data ialah menggunakan fetchColumn():
if ($query->fetchColumn()) { // Record exists } else { // Record does not exist }
4. Pendekatan Satu Pertanyaan:
Anda juga boleh menyemak kewujudan kedua-dua nama pengguna dan e-mel dalam satu pertanyaan:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username =:Username OR Email =:Email"); $query->execute([':Username' => $name, ':Email' => $email]); if ($query->fetchColumn()) { // Username or email already exist } else { // Username and email are both available }
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Cuba Mengakses Array Offset pada Nilai Jenis Bool' dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!