【问题标题】:preventing duplicate row insertion in php/mysql防止在 php/mysql 中重复插入行
【发布时间】:2010-02-25 02:28:12
【问题描述】:

如何防止php mysql中重复记录的输入?在插入表之前验证输入。

我目前正在为我的网站构建用户注册部分,但如果在数据库中发现重复的用户名或电子邮件地址,我想向他们显示错误。

编辑
这就是我要插入行的内容......我将如何在这里实现这两个答案:

  <?php
        if (array_key_exists('confirm',$_POST)) {

                $Cuser = $_POST['Cuser']; 
                $Cemail = $_POST['Cemail']; 
                $Cpassword = $_POST['Cpassword'];
                $md5password = md5($_POST['Cpassword']);

                mysql_query("INSERT INTO tbl_users (`username`,`email`,`password`)
VALUES ('$Cuser', '$Cemail', '$md5password')"); 

                echo "Thank you. The user <b>".$Cuser."&nbsp;(".$Cemail.")</b> has been successfully added to the database.<p>

                <a href='myaccount.php' class='form'>Return</a>";       

                exit;
        }
        ?>

我猜我可以在 if...else 语句中实现这一切?

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    为用户名和电子邮件列定义唯一约束:

    ALTER TABLE your_table ADD CONSTRAINT uk_username UNIQUE (username)
    ALTER TABLE your_table ADD CONSTRAINT uk_email UNIQUE (email)
    

    如果试图插入或更新的值已经存在于表中,MySQL 将返回一个错误,说明查询违反了适当的唯一约束(可能两者都有)。由您来设置 PHP 以优雅地处理此问题。

    【讨论】:

      【解决方案2】:

      在插入之前,运行类似的 SQL 语句

      SELECT * FROM users WHERE users.name = :name OR users.email = :email
      

      (使用parametrized SQL)并计算返回的行数。

      如果超过 0,则存在重复。

      OMG Ponies 建议对这两个字段进行限制,这也是防止您在数据库中出错的好主意。但是,如果您插入重复项,那么所有约束都会得到您可能想要或不想尝试解析的数据库错误消息。

      【讨论】:

      • 我使用了 sql 语句和 if else 语句。 mysql_select_db($database_speedycms, $speedycms); $query_usercheck = "SELECT * FROM tbl_users WHERE username='$user' OR email='$email'"; $usercheck = mysql_query($query_usercheck, $speedycms) 或死(mysql_error()); $row_usercheck = mysql_fetch_assoc($usercheck); $totalRows_usercheck = mysql_num_rows($usercheck);然后 if ( $totalRows_usercheck > 0 ) 显示错误消息以防止添加任何重复项,否则允许数据库插入
      【解决方案3】:

      我使用了 sql 语句和 if else 语句。

      mysql_select_db($database_speedycms, $speedycms);
      $query_usercheck = "SELECT * FROM tbl_users WHERE username='$user' OR email='$email'";
      $usercheck = mysql_query($query_usercheck, $speedycms) or die(mysql_error());
      $row_usercheck = mysql_fetch_assoc($usercheck);
      $totalRows_usercheck = mysql_num_rows($usercheck);
      

      然后

      if ( $totalRows_usercheck > 0 )
      

      显示错误消息以防止添加任何重复项

      否则允许数据库插入

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 2013-03-23
        • 1970-01-01
        • 2015-08-07
        • 2011-08-20
        • 2014-09-22
        相关资源
        最近更新 更多