Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đang cố gắng truy cập phần bù mảng trên giá trị của kiểu bool

Bạn gặp phải lỗi này có thể do không tìm thấy bản ghi nào trong cơ sở dữ liệu phù hợp với tiêu chí của bạn.

Cách dễ nhất để giải quyết lỗi này là kiểm tra xem cơ sở dữ liệu có trả lại bất kỳ thứ gì trước không.

$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']) {
    // ...
}

Nếu bạn không quan tâm liệu cơ sở dữ liệu có trả về bất kỳ thứ gì hay không, thì bạn có thể chỉ cần cung cấp một giá trị mặc định. Ví dụ:

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

Cách chính xác để kiểm tra sự tồn tại trong DB bằng PDO là:

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

Thay vì tìm nạp hàng và thực hiện lại phép so sánh trong PHP, tôi đang tìm nạp số lượng hàng phù hợp từ cơ sở dữ liệu và tôi sử dụng số đó làm boolean trong if tuyên bố. fetchColumn() sẽ tìm nạp một cột từ hàng đầu tiên và nếu tôi sử dụng COUNT(*) Tôi biết sẽ luôn có một hàng.

Bạn cũng có thể làm điều đó trong một truy vấn:

$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. MySQL chèn hàng trên bản cập nhật khóa trùng lặp nhiều cột

  2. Số nguyên không chính xác (2147483647) được chèn vào MySQL?

  3. SQL Internal Join - Cách nối 3 bảng trong SQL và MySQL

  4. 500 Lỗi máy chủ nội bộ?

  5. Cách loại bỏ lỗi MySQL 'Câu lệnh đã chuẩn bị cần được chuẩn bị lại'