首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止在php/mysql中重复插入行

防止在php/mysql中重复插入行
EN

Stack Overflow用户
提问于 2010-02-25 02:28:12
回答 3查看 13.4K关注 0票数 7

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

我目前正在为我的网站构建一个用户注册部分,但如果在数据库中找到一个重复的用户名或电子邮件地址,则希望将它们显示为错误。

编辑

这就是我要走多远才能插入的.我将如何在这里实现这两种答案:

代码语言:javascript
复制
  <?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语句中实现所有这些?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-25 03:11:15

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

代码语言:javascript
复制
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);

然后

代码语言:javascript
复制
if ( $totalRows_usercheck > 0 )

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

否则,允许数据库插入。

票数 2
EN

Stack Overflow用户

发布于 2010-02-25 02:34:07

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

代码语言:javascript
复制
ALTER TABLE your_table ADD CONSTRAINT uk_username UNIQUE (username)
ALTER TABLE your_table ADD CONSTRAINT uk_email UNIQUE (email)

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

票数 17
EN

Stack Overflow用户

发布于 2010-02-25 02:34:13

插入之前,运行如下所示的SQL语句

代码语言:javascript
复制
SELECT * FROM users WHERE users.name = :name OR users.email = :email

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

如果超过0,就会有重复。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2331177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档