Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mencoba mengakses offset array pada nilai tipe bool

Anda mendapatkan kesalahan ini mungkin karena tidak ada catatan yang ditemukan dalam database yang cocok dengan kriteria Anda.

Cara termudah untuk mengatasi kesalahan ini adalah dengan memeriksa apakah database mengembalikan sesuatu terlebih dahulu.

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
// VVV - Here I am checking if there was anything returned and then I check the condition
if($emailRes && $emailRes['Email']==$_POST['email']) {
    // ...
}

Jika Anda tidak peduli apakah database mengembalikan sesuatu, maka Anda cukup memberikan nilai default. Misalnya:

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
$email = $emailRes['Email'] ?? ''; // default: empty string

Cara yang benar untuk memeriksa keberadaan di DB menggunakan PDO adalah:

$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!");
}

Alih-alih mengambil baris dan melakukan perbandingan lagi di PHP, saya mengambil jumlah baris yang cocok dari database dan saya menggunakan hitungan itu sebagai boolean di if penyataan. fetchColumn() akan mengambil satu kolom dari baris pertama dan jika saya menggunakan COUNT(*) Saya tahu akan selalu ada satu baris.

Anda juga dapat melakukannya dalam satu kueri:

$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!");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF-8 tidak berfungsi dalam bentuk HTML

  2. Skema XSD ke MySQL

  3. Pernyataan SQL untuk menulis tabel?

  4. cara memberikan nomor seri yang sama untuk grup catatan di mysql

  5. Bagaimana cara menggunakan mysqli_query() di PHP?