我要检查数据库中是否已有用户(电子邮件)。
$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 ...
}
如果没有现有条目,则用户可以创建它。
但是我的代码不起作用:我有什么主意吗?
答案 0 :(得分:4)
您的问题是您正在比较字符串(电子邮件)和数字(0)。在这种情况下,字符串将转换为数字并变为 0 。 0不大于0,因此您的条件返回false
在比较中仅使用$fetchergebnis
即可。 PHP是一种松散类型的语言,您可以在条件运算符中使用几乎任何类型的变量,并且任何“非空”值都可以像true
一样工作。一个非空数组。
更好的方法是使用更合适的fetchAll()
(而不是fetchColumn()
)(但请检查直接结果,即从fetch获取的实际变量)
针对您任务的规范解决方案:How to check if email exists in the database?
答案 1 :(得分:1)
我使用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';