Mysql
 sql >> база данни >  >> RDS >> Mysql

Опит за достъп до изместване на масива върху стойност от тип bool

Получавате тази грешка вероятно, защото в базата данни не бяха намерени записи, отговарящи на вашите критерии.

Най-лесният начин да разрешите тази грешка е първо да проверите дали базата данни е върнала нещо.

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

Ако не ви интересува дали базата данни е върнала нещо, тогава можете просто да предоставите стойност по подразбиране. Например:

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

Правилният начин за проверка за съществуване в DB чрез PDO е:

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

Вместо да извличам реда и да правя сравнението отново в PHP, извличам брой съвпадащи редове от базата данни и използвам този брой като булев в if изявление. fetchColumn() ще извлече една колона от първия ред и ако използвам COUNT(*) Знам, че винаги ще има един ред.

Можете също да го направите с една заявка:

$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. Мога ли да параметризирам името на таблицата в подготвено изявление?

  2. Вмъкнете там, където не съществува - без първичен ключ

  3. Ремонтирайте всички маси наведнъж

  4. Как да импортирам sql файл в база данни, игнорирайки X редове във файла?

  5. Синтаксис на SQL DROP TABLE – Изброен от СУБД