首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入MySQL表主键约束冲突

问插入MySQL表主键约束冲突
EN

Stack Overflow用户
提问于 2014-02-02 14:18:45
回答 1查看 1.1K关注 0票数 1

我正在尝试生成一个没有在我的数据库中的唯一用户名,然后将它作为主键添加到我的InnoDB数据库表中,再加上一些其他字段条目。

我得到了错误代码:

代码语言:javascript
复制
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ft6888' for key 'PRIMARY'

手动检查数据库表,我可以看到它不包含我要传递的值,通过回显我要绑定的用户名值,我可以看到每个值只绑定一次。该字段没有像在这些问题中一样设置为auto_increment,但在其他一些表中用作外键(但我所绑定的值也不存在于这些表中)。

如果在绑定之前回显我要绑定的变量,就会得到两组正确的数据。当我使用phpmyadmin将相同的数据(复制和粘贴)插入到表中时,它不会出错。我只能假设我的代码本身正在尝试插入两次吗?

代码语言:javascript
复制
$query = "INSERT INTO user_login (username, usertype, hashedpassword) VALUES";
$qPart = array_fill(0, count($excelData), "(?, ?, ?)");
$query .=  implode(",",$qPart);
$sth = $dbh->prepare($query); 
$i = 1;

$sql = "SELECT username FROM user_login WHERE username = :username";
$sthUser = $dbh->prepare($sql);

Foreach($excelData As $Row){
    Do{
        //Create unique userID
        $finitial = substr(addslashes(str_replace(" ","",$Row['0']['2'])),0,1);
        $sinitial = substr(addslashes(str_replace(" ","",$Row['0']['3'])),0,1);
        $username = strtolower($finitial).strtolower($sinitial).rand(999,9999);

        try {
             $sthUser->bindParam(':username', $username);
             $sthUser->execute();
             $Row = $sthUser->fetch(PDO::FETCH_ASSOC);
         }catch (PDOException $e) {
             print $e->getMessage();
                                }
         }while(!empty($Row));

         $hashedPassword = create_hash($Row['0']['1']);
         $usertype = 'Student';
         $sth->bindParam($i++, $username);
         $sth->bindParam($i++, $usertype);
         $sth->bindParam($i++, $hashedPassword);

    }
    try {
          $sth->execute();
    }catch (PDOException $e) {
          print $e->getMessage();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 15:58:58

找到答案here -似乎循环中的bindParam通过引用绑定,并且只在execute语句中进行计算,因此它总是包含每个字段的最后一个绑定值。

将其更改为bindValue有效。

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

https://stackoverflow.com/questions/21511618

复制
相关文章

相似问题

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