проверка, существует ли пользователь в базе данных или нет - с помощью pdo - PullRequest
0 голосов
/ 07 июня 2019

Я хочу проверить, есть ли пользователь (электронная почта) в базе данных или нет.

    $email_pruefen = ($_GET['email']);

    //SQL Statement ob email bereits existiert
    try {
            $stmt = $pdo->prepare("SELECT rechnungsmail FROM kundendaten WHERE rechnungsmail = :checkmail");
            $stmt->execute([':checkmail' => $email_pruefen]);
            $fetchergebnis = $stmt->fetchAll(); //entnimmt alles aus dem Statement (Value, True/False, ..)

            if($fetchergebnis[0] > 0){
                $ergebnis = "Ja"; //Eintrag ist vorhanden
            } else {
                $ergebnis = "Nein"; //Eintrag ist nicht vorhanden
            }

            $pdo = null; //Verbindung schließen

    } catch (PDOException $e) {
        $meldung_checkemail = "Überprüfung der E-Mail Adresse war ohne Erfolg. Bitte wenden Sie sich an die IT.";
        echo "<script type='text/javascript'>alert('$meldung_checkemail');</script>";

        die();
    }


if($ergebnis == "Nein"){ //Wenn Email nicht existiert, führe folgendes aus
 ... create user ...
}else{
 ... dont create user ...
}

Если записи не существует, пользователь может создать ее.

, номой код не работает: у меня есть идеи?

Ответы [ 2 ]

4 голосов
/ 07 июня 2019

Ваша проблема в том, что вы сравниваете строку (электронная почта) с числом (0).В этом случае строка будет преобразована в число и станет 0 .0 не больше 0, поэтому ваше условие возвращает false

Используйте только <strong>$fetchergebnis</strong> в вашем сравнении, и оно будет работать.PHP является свободно типизированным языком, вы можете использовать переменную практически любого типа в условном операторе, и любое «непустое» значение будет работать как true.Непустой массив также.

Еще лучше, вместо fetchAll(), который не подходит для этого случая, используйте более подходящий fetchColumn() (но, тем не менее, проверьте прямой результат, фактическую переменную, которую вы получаете из fetch)

Каноническое решение для вашей задачи: Как проверить, существует ли электронная почта в базе данных?

1 голос
/ 07 июня 2019

Я протестировал if($fetchergebnis[0] > 0), используя var_dump(), и кажется, что это возвращает Undefined offset:0 плюс bool(false), когда оператор ничего не получил (проверял, потому что я никогда не пытался использовать его раньше)

Один из способов - использовать rowCount() перед выборкой, чтобы проверить, возвращена ли какая-либо строка оператором SELECT, что-то вроде этого:

$stmt = $pdo->prepare("SELECT rechnungsmail FROM kundendaten WHERE rechnungsmail = :checkmail");
$stmt->execute([':checkmail' => $email_pruefen]);

$ergebnis = ($stmt->rowCount() > 0) ? 'Ja' : 'Nein';

OR

Поскольку вы просто проверяете, существует ли что-то и вам не нужно использовать какие-либо данные, извлеченные из него, вы также можете использовать COUNT(*):

$stmt = $pdo->prepare("SELECT COUNT(*) FROM kundendaten WHERE rechnungsmail = :checkmail");
$stmt->execute([':checkmail' => $email_pruefen]);
$count = $stmt->fetchColumn();
$ergebnis = ($count > 0) ? 'Ja' : 'Nein';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...