Проверка наличия электронной почты в базе данных? - PullRequest
4 голосов
/ 23 февраля 2012

У меня есть эта функция или метод в моем классе, но он не возвращает количество строк, когда я вставляю в него электронное письмо.Я проверил соединение MySQL и т. Д., Они все работают.Также обратите внимание, что письмо, которое я передаю через метод, уже существует в базе данных.Мой план состоит в том, чтобы получить количество строк, и если оно больше нуля, это означает, что у нас уже есть этот адрес электронной почты в базе данных.

public function userExist($email) {
    $query = "SELECT email FROM " . USER_TABLE . " WHERE email = ?";

    $stmt = $this->_db->prepare($query);

    $stmt->bind_param("s", $email);

    if ($stmt->execute()) {
        $stmt->store_result();
        return $stmt->num_rows;
    }
        return false;


}

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Я не знаю, как использовать pdo с mysqli, но вы хотите проверить, существует ли запись с использованием функции mysql EXISTS и чем получить результат (который всегда равен 1 или 0).

SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = ?) as email_exists

В приведенном выше запросе email_exists будет либо 1, либо 0, в зависимости от того, находится ли уже электронное письмо в таблице или нет.

С PDO Я бы сделал это так:

$sth = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = :email)");
$sth->execute(array('email' => $email));
return $sth->fetchColumn();

Я дам вам понять, как сделать это самостоятельно с вашим собственным классом.

1 голос
/ 23 февраля 2012
public function userExist($email) {
$query = "SELECT COUNT(*) AS num_rows FROM " . USER_TABLE . " WHERE email = ?";

$stmt = $this->_db->prepare($query);

$stmt->bind_param("s", $email);

if ($stmt->execute()) {
    $stmt->store_result();
    return $stmt->num_rows;
}
    return false;


}

вот, пожалуйста, обратите внимание SELECT COUNT(*) AS num_rows (я использовал num_rows, чтобы вам не пришлось менять код, это может быть что угодно, если вы ссылаетесь на него как $stmt->VAR_NAME после выполнения запроса.)

...