php PDO 错误 "Integrity constraint violation: 1062 Duplicate entry"
php PDO error "Integrity constraint violation: 1062 Duplicate entry"
我想制作一个简单的注册表单,我想在其中检查电子邮件是否已被使用,如果没有,则将数据插入我的数据库。如果我提交表单,我会收到这个致命错误“Integrity constraint violation: 1062 Duplicate entry”但是数据还是被提交了,我可以在我的数据库中看到它。如果我只插入数据或检查电子邮件是否已被使用,我不会得到这个 error.maybe 有人可以帮我解决这个问题。
这是代码:
html
<form action="test.php" method="POST">
<input type="text" name="name" placeholder="name" autofocus="on">
<input type="text" name="email" placeholder="email">
<input type="submit">
</form>
php
try
{
$pdo = new PDO($attr, $user, $pass, $opts);
}
catch (PDOException $e)
{
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
if($_POST)
{
$name = $_POST['name'];
$email = $_POST['email'];
$emailAbfrage = "SELECT email FROM accounts";
$result = $pdo->query($emailAbfrage);
while($row = $result->fetch())
{
if($email == $row['email'])
{
echo "email ist schon vergeben";
}
else
{
$insert = $pdo->prepare("INSERT INTO `accounts`(`kundenname`, `email`) VALUES (?,?)");
$insert->execute(array($name, $email));
}
}
}
代码片段有一些错误:
- 您遍历所有帐户。如果你得到一个匹配然后你打印
email is schon vergeben
但你没有 break
所以它仍然会遍历所有其他帐户,在那里你会到达 else
,尝试插入重新登录,得到Duplicate Entry
异常
- 您的查询字面意思是 returns 所有 数据库中的帐户。更好的是
SELECT email FROM accounts WHERE email=?
,它只是 return 您关心的一个帐户。
- 甚至比做
SELECT
更好,你可以做 INSERT INTO accounts(kundenname, email) VALUES (?,?) ON DUPLICATE KEY UPDATE email=VALUES(email)
。仅当帐户不存在时才会插入。您可以检查 returned 行数以查看它是否添加了新记录。如果账户已经存在,请更改 ON DUPLICATE KEY UPDATE...
之后的部分以满足您的需要。
我想制作一个简单的注册表单,我想在其中检查电子邮件是否已被使用,如果没有,则将数据插入我的数据库。如果我提交表单,我会收到这个致命错误“Integrity constraint violation: 1062 Duplicate entry”但是数据还是被提交了,我可以在我的数据库中看到它。如果我只插入数据或检查电子邮件是否已被使用,我不会得到这个 error.maybe 有人可以帮我解决这个问题。 这是代码:
html
<form action="test.php" method="POST">
<input type="text" name="name" placeholder="name" autofocus="on">
<input type="text" name="email" placeholder="email">
<input type="submit">
</form>
php
try
{
$pdo = new PDO($attr, $user, $pass, $opts);
}
catch (PDOException $e)
{
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
if($_POST)
{
$name = $_POST['name'];
$email = $_POST['email'];
$emailAbfrage = "SELECT email FROM accounts";
$result = $pdo->query($emailAbfrage);
while($row = $result->fetch())
{
if($email == $row['email'])
{
echo "email ist schon vergeben";
}
else
{
$insert = $pdo->prepare("INSERT INTO `accounts`(`kundenname`, `email`) VALUES (?,?)");
$insert->execute(array($name, $email));
}
}
}
代码片段有一些错误:
- 您遍历所有帐户。如果你得到一个匹配然后你打印
email is schon vergeben
但你没有break
所以它仍然会遍历所有其他帐户,在那里你会到达else
,尝试插入重新登录,得到Duplicate Entry
异常 - 您的查询字面意思是 returns 所有 数据库中的帐户。更好的是
SELECT email FROM accounts WHERE email=?
,它只是 return 您关心的一个帐户。 - 甚至比做
SELECT
更好,你可以做INSERT INTO accounts(kundenname, email) VALUES (?,?) ON DUPLICATE KEY UPDATE email=VALUES(email)
。仅当帐户不存在时才会插入。您可以检查 returned 行数以查看它是否添加了新记录。如果账户已经存在,请更改ON DUPLICATE KEY UPDATE...
之后的部分以满足您的需要。