Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat Ralat \'Cuba Mengakses Array Offset pada Nilai Jenis Bool\' dalam PHP?

Mengapa Saya Mendapat Ralat \'Cuba Mengakses Array Offset pada Nilai Jenis Bool\' dalam PHP?

Barbara Streisand
Lepaskan: 2024-11-18 04:17:03
asal
384 orang telah melayarinya

Why Am I Getting a

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

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

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

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

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!

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