所以我刚刚开始使用PHP / MySQL,并且在运行以下尝试将数据插入表中的代码时遇到了问题。导致错误的原因是我将用户名列设置为唯一且用户名为" TEST"已被使用。有没有办法可以编写if语句来仅捕获创建重复条目时发生的错误?
$sql = "INSERT INTO users (username, password, email)
VALUES ('$_SESSION[username]', '$_SESSION[password]', '$_SESSION[email]')";
if ($con->query($sql) === TRUE) {
echo "New record created successfully";}
else {echo "Error: " . $sql . "<br>" . $con->error;}
我得到的错误是:
错误:INSERT INTO用户(用户名,密码,电子邮件)VALUES(&#39; TEST&#39;,&#39;密码&#39;,&#39; example@gmail.com') 重复录入&#39; TEST&#39;用于密钥&#39;用户名&#39;
答案 0 :(得分:2)
MySQL以数字,状态和消息的形式返回错误。如果不解析消息,您将无法确定哪些列是重复的。
此外,MySQL将在第一次失败时爆炸。因此,如果您将user_name和e_mail作为重复项,则只会在消息中返回遇到的第一个重复项。
编辑:这是解决方案
要检查此特定错误,您需要找到错误代码。重复键为1062
。然后使用errno()
的结果与:
mysql_query('INSERT INTO ...');
if (mysql_errno() == 1062) {
echo'no way!';
}
答案 1 :(得分:2)
您可以尝试使用INSERT IGNORE INTO users ... your query ...
。它不会创建错误,在查询之后你应该检查$con->affected_rows
的值 - 如果它等于0
那么就有重复(插入语句失败并被忽略)。
检查一下,我可能不正确,但据我记得,它应该有效。
答案 2 :(得分:0)
多数民众赞成在那里,因为你已经有一行具有该值。请使用准备好的陈述,没有人想要遭受被黑网站的攻击。</ p>
答案 3 :(得分:0)
没有更多代码,没有一种明确的方法可以知道您正在使用哪个sql库。大多数都有某种错误代码与错误消息一起出现。如果你能确定你可能有机会。
如实?修改您的查询以处理重复的名称问题 - 或在创建之前检查它。