Mengapakah saya mendapat ralat \'Cuba Mengakses Array Offset pada Nilai Jenis Bool\' semasa menyemak keputusan pertanyaan pangkalan data?

Linda Hamilton
Lepaskan: 2024-11-16 09:06:03
asal
451 orang telah melayarinya

Why am I getting the

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan