Вы получаете эту ошибку, вероятно, потому что в базе данных не найдено записей, соответствующих вашим критериям.
Это не то, как вы бы проверяли наличие в БД с помощью 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!");
}