Ralat: "Mencuba Mengakses Array Offset pada Nilai Jenis Bool"
Dalam coretan kod ini, anda cuba mengakses Kekunci nama pengguna dan E-mel dalam tatasusunan $nameRes dan $emailRes untuk menyemak sama ada ia sepadan dengan input pengguna. Walau bagaimanapun, anda mendapat ralat "Cuba mengakses tatasusunan mengimbangi pada nilai jenis bool."
Punca
Ralat ini berlaku apabila pertanyaan pangkalan data mengembalikan Boolean nilai, biasanya benar atau palsu, menunjukkan sama ada terdapat padanan dalam pangkalan data. Jika tiada padanan, pertanyaan akan kembali palsu. Dalam kes anda, apabila pangkalan data tidak menemui Nama Pengguna atau E-mel yang sepadan, ia mengembalikan palsu, menjadikan tatasusunan $nameRes atau $emailRes sebagai nilai Boolean.
Penyelesaian
Terdapat beberapa cara untuk menangani situasi ini:
1. Semak untuk Keputusan Null atau Kosong
Sebelum mengakses kekunci Nama Pengguna atau E-mel, semak sama ada tatasusunan adalah batal atau kosong:
if ($nameRes && !empty($nameRes['Username']) { // Proceed with username check }
2. Gunakan Nilai Lalai
Jika anda tidak peduli sama ada rekod itu wujud dalam pangkalan data, tetapkan nilai lalai kepada kekunci:
$name = $nameRes['Username'] ?? ''; $email = $emailRes['Email'] ?? ''; if ($name == $_POST['username']) { // Proceed with username check }
3. Gunakan FetchColumn PDO
Daripada mengambil keseluruhan baris dan membandingkannya dalam PHP, gunakan fetchColumn() untuk mengambil kiraan baris yang sepadan sahaja. Ini mengembalikan nilai tunggal (sama ada 0 atau integer bukan sifar), yang boleh anda gunakan dalam pernyataan if:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username"); $query->execute([':Username' => $name]); if ($query->fetchColumn()) { // Proceed with username check }
4. Gunakan Pertanyaan Tunggal
Anda boleh menggabungkan nama pengguna dan semakan e-mel ke dalam satu pertanyaan dengan menggunakan syarat ATAU:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username OR Email = :Email"); $query->execute([':Username' => $name, ':Email' => $email]); if ($query->fetchColumn()) { // Proceed with username/email check }
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \'Cuba Mengakses Array Offset pada Nilai Jenis Bool\' semasa menyemak keputusan pertanyaan pangkalan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!