Здравствуйте, объясните пожалуйста, как работает уникальность записи БД, а вернее её проверка?
Я хочу чтобы при совпадении определённой записи в БД, он выводил ошибку. Для этого, я для столбца поставил Индекс. Но пока к сожалению работает один вариант, слишком криво. А второй вообще не работает.
1-й вариант:
$stmt = $dbh->prepare("INSERT INTO users (name, lastname, email, password) VALUES (:name, :lastname, :email, :pass)");
$stmt->bindParam(':name', $name_t);
$stmt->bindParam(':lastname', $lastname_t);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':pass', $hashed_password);
$falg = $stmt->execute();
if ($falg) {
header ("Location: index.html");
die;
} else {
echo "Данная электронная почта уже используется. ";?><a href="enter.php" style="color: red">Войдите</a> <?php echo "по этой почте или используйте другую";
die;
}
Здесь криво работает, выдаёт ошибку, если я не ошибаюсь "00000", и я её сразу же считаю её совпадением записи, и указываю, что такая запись есть. Но это происходит после перезагрузки страницы, с обычным текстом вверху страницы и всё. Что криво.
2-й вариант:
$stmt = $dbh->prepare("INSERT INTO users (name, lastname, email, password) VALUES (:name, :lastname, :email, :pass)");
$stmt->bindParam(':name', $name_t);
$stmt->bindParam(':lastname', $lastname_t);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':pass', $hashed_password);
$stmt->execute();
if ($stmt->fetch(PDO::FETCH_NUM)) {
echo "Данная электронная почта уже используется. ";?><a href="enter.php" style="color: red">Войдите</a> <?php echo "по этой почте или используйте другую";
}else{
echo "Успешно";
}
Который к сожалению не работает. Тут я думал, отлавливать такую запись в БД, и указывать что она есть. Или же выводить успешно.
Такой вариант у меня работает на другой странице, и он в этой же форме выводит запись, что всё хорошо или плохо. Что-то типа такого:
if ( !empty($pwd) && !empty($email) ) {
$stmt = $dbh->prepare('SELECT email, password FROM users WHERE email = :email');
$stmt->bindParam(':email', $email);
$stmt->execute();
$user_p = $stmt->fetch(PDO::FETCH_OBJ);
if ($user_p){
if(password_verify($pwd, $user_p->password)){
echo "Успешно";
}else{
echo '<p class="wrong">Неверный Email или пароль</p>';
}
}else{
echo '<p class="wrong">Неверный Email или пароль</p>';
}
}else{
echo '<p class="noValues">Пожалуйста, заполните все поля</p>';
}
Но тут к сожалению не работает. Подскажите пожалуйста в каком направлении двигаться?