Php mysqli insert在重复项上不返回false

Php mysqli insert在重复项上不返回false,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我有一个向数据库插入新用户的函数。如果输入有点不好,或者用户名或电子邮件已经激活,我希望它返回false 这就是它看起来的样子: public function input( $username, $password, $email ){ if( $stmt = $this->mysqli->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)" )){ $stmt-&

我有一个向数据库插入新用户的函数。如果输入有点不好,或者用户名或电子邮件已经激活,我希望它返回false

这就是它看起来的样子:

public function input( $username, $password, $email ){
    if( $stmt = $this->mysqli->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)" )){

        $stmt->bind_param('sss', $username, $password, $email);
        $stmt->execute();
        $stmt->close();
        $this->mysqli->close();

        return true;
    }
    else{
        return false;
    }
}

在我尝试创建一个副本之前,它工作得非常好,它返回true,但正如我所看到的,它不会影响数据库中的tabledata。

如果
准备失败,您的函数只会返回false-在此之前,您不会添加数据

return !!$this->mysqli->insert_id; // instead of true
您可以检查insert语句的返回值,以查看实际返回的内容,以及insert是否成功


此外,您的问题标题和标记表明您正在使用mysqli,但您的函数调用都是针对
mysql.*
-这两个调用是打字错误吗?

您的数据库结构中是否定义了PK或复合键?我有一个名为ID的PK,可以自动递增。我也有属性电子邮件和用户名设置为唯一的。在那里,修复了它!你刚才提到的函数调用只是一个变量名。该死,我把mysql变量名编辑成了mysqli,所以现在你的答案有错了!很抱歉