Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Próba uzyskania dostępu do offsetu tablicy dla wartości typu bool

Otrzymujesz ten błąd prawdopodobnie dlatego, że w bazie danych nie znaleziono rekordów spełniających Twoje kryteria.

Najłatwiejszym sposobem rozwiązania tego błędu jest sprawdzenie, czy baza danych coś zwróciła najpierw.

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

Jeśli nie obchodzi Cię, czy baza danych coś zwróciła, możesz po prostu podać wartość domyślną. Na przykład:

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

Prawidłowy sposób sprawdzenia istnienia w DB za pomocą PDO to:

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

Zamiast pobierać wiersz i ponownie przeprowadzać porównanie w PHP, pobieram liczbę pasujących wierszy z bazy danych i używam tej liczby jako wartości logicznej w if oświadczenie. fetchColumn() pobierze pojedynczą kolumnę z pierwszego wiersza i jeśli użyję COUNT(*) Wiem, że zawsze będzie jeden rząd.

Możesz to również zrobić w jednym zapytaniu:

$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. node.js połączenie mySQL przez singleton

  2. jak uzyskać wszystkie wyniki krotki mysql i przekonwertować na json

  3. LEWE DOŁĄCZ w ZF2 za pomocą TableGateway

  4. Jak zachowuje się operator minus między dwiema datami i godzinami w MySQL?

  5. Indeks PostgreSQL a indeks InnoDB — zrozumienie różnic