重复的表条目错误

时间:2014-10-29 01:18:25

标签: php mysql easyphp

所以我刚刚开始使用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;

4 个答案:

答案 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库。大多数都有某种错误代码与错误消息一起出现。如果你能确定你可能有机会。

如实?修改您的查询以处理重复的名称问题 - 或在创建之前检查它。