@rewqqwer

Как написать код проверки данных из бд?

Привет, возникла курьезная проблема в моей простой формочке для регистрации, способ (если это так можно назвать) по проверке на существования в бд введеного логина/почты не оправдал себя, т.к. он попросту не работает. Не подскажете как реализовать эту проверку, желательно с помощью библ PDO, чтобы сохранять лаконичность или же укажите, пожалуйста, ошибку.
$sth = $conn->prepare("SELECT COUNT(*) as count FROM users WHERE mail =". $data['mail']);
		$sth->execute();
		$members = $sth->fetchColumn();
		//if ($members=$conn->query("SELECT COUNT(*) as count FROM users WHERE mail =". $data['mail'])->fetchColumn()) {
		if ($members) {
			$data['mail'] = '##';
			echo "privet";
			throw new Exception('Пользватель с таким email уже существует');
		}
		$sth = $conn->prepare("SELECT COUNT(*) as count FROM users WHERE login =". $data['login']);
		$sth->execute();
		$members = $sth->fetchColumn();
		if ($members) {
			$data['login'] = '##';
			throw new Exception('Пользватель с таким логином уже существует');
		}
    	$sql = "INSERT INTO users ( login, mail, pass, proj ) VALUES ( :login, :mail, :pass, :proj )";
    	$st = $conn->prepare ( $sql );
    	$st->bindValue( ":login", $data['login'], PDO::PARAM_STR );
    	$st->bindValue( ":mail", $data['mail'], PDO::PARAM_STR );
    	$st->bindValue( ":pass", password_hash($data['pass'], PASSWORD_DEFAULT), PDO::PARAM_STR );
    	//$st->bindValue( ":id", $data['id'], PDO::PARAM_INT );
    	$st->bindValue(":proj", '##', PDO::PARAM_STR);
    	$st->execute();
    	$data['id'] = $conn->lastInsertId();
		$user = new user($data);
    	$conn = null;
		$_SESSION['user'] = $user;
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
@morricone85
Зачем делать несколько запросов? Можно так:
SELECT login, mail from users WHERE mail =". $data['mail'] AND login=". $data['login'] LIMIT 1
Eсли значения есть - выводишь ошибку, а если нет - то, добавляешь пользователя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$nRows = $pdo->query('select count(*) FROM users WHERE login =". $data['login']')->fetchColumn(); 
if($nRows > 0){
echo 'такой логин занят'
}
Ответ написан
Комментировать
@ArcadyZherdev
Я бы начал с того что использовал bind переменные в проверяющих запросах:
$sth = $conn->prepare("SELECT COUNT(*) as count FROM users WHERE mail = :mail");
$sth->bindValue(":mail", $data['mail']);
$sth->execute();
if ($members = $sth->fetchColumn()) {
    throw new Exception('Пользватель с таким email уже существует');
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы