繁体   English   中英

插入MySQL表主键约束冲突

[英]Insert into MySQL table Primary Key Constraint Violation

我正在尝试生成数据库中尚不存在的唯一用户名,然后将其作为主键添加到我的InnoDB数据库表以及其他一些字段条目中。

我收到错误代码:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ft6888' for key 'PRIMARY'

手动检查数据库表,我可以看到它不包含我要传递的值,并且通过回显我绑定的用户名值,我可以看到每个表仅被绑定一次。 在某些问题中,该字段未设置为auto_increment,但在其他一些表中将其用作外键(但我绑定的值在这两个表中都不存在)。

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

$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();
    }

这里找到了答案-似乎循环内的bindParam通过引用绑定,并且仅在execute语句中求值,因此它始终包含每个字段的最后一个绑定值。

将其更改为bindValue起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM