0

我正在尝试添加X到我的数据库中的某个表,但我收到了这个错误。即使X表中不存在,它也会说它在那里。虽然X被添加到数据库中,但我想摆脱这个错误。我根本不知道它是否相关,但我正在使用 Mysqli 的准备好的语句,并且使用$statement->errno." ".$statement->error. 有人可以向我解释一下吗?谢谢。

更新:这是代码: X = USER_USERNAME

$stmt = $mysqli->prepare("INSERT INTO USERS (USER_USERNAME, USER_EMAIL, USER_BIRTHDAY, USER_PASSWORD, USER_SALT, USER_IP, USER_ACTIVATION_CODE) VALUES (?,?,?,?,?,INET_ATON(?),?)");
            $stmt->bind_param('sssssss',$username,$email,$date,$hashed_password,$salt,$IP,$activation_code);
            $stmt->execute();
            if (!$stmt->execute()) {
                echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
            }
            else {
                echo "ok";
            }

显示创建表用户:

 CREATE TABLE `USERS` (
 `USER_ID` int(11) NOT NULL AUTO_INCREMENT,
 `USER_FIRSTNAME` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_LASTNAME` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_USERNAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_PASSWORD` varchar(128) CHARACTER SET utf8 DEFAULT NULL,
 `LEVEL_ID` int(11) NOT NULL,
 `USER_BIRTHDAY` date DEFAULT NULL,
 `USER_EMAIL` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_GENDER` enum('M','W','U') CHARACTER SET utf8 DEFAULT NULL,
 `USER_COUNTRY` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_LOCATION` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_ADDRESS` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
 `USER_HOUSENUMBER` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
 `USER_AVATAR` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
 `USER_REGISTRATION_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `USER_ACTIVATION_DATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_STATUS` enum('REGISTERED','ACTIVE','BANNED','NONACTIVE') CHARACTER SET utf8 DEFAULT NULL,
 `USER_BANNED_DATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_LATEST_LOGIN` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_EXP` bigint(20) DEFAULT NULL,
 `USER_DESCRIPTION` text CHARACTER SET utf8,
 `USER_ACTIVATION_CODE` varchar(32) CHARACTER SET utf8 NOT NULL DEFAULT '0',
 `USER_SALT` varchar(15) CHARACTER SET utf8 NOT NULL,
 `USER_IP` int(10) NOT NULL,
 `USER_REMEMBER_KEY` varchar(32) CHARACTER SET utf8 NOT NULL,
 PRIMARY KEY (`USER_ID`),
 UNIQUE KEY `USER_USERNAME` (`USER_USERNAME`),
 UNIQUE KEY `USER_EMAIL` (`USER_EMAIL`),
 KEY `LEVEL_ID` (`LEVEL_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1
4

4 回答 4

1

您可能正在尝试插入一条 ID(或其他字段)为 1 集的记录,而该记录已存在于表中。作为主键的字段对于每条记录必须具有唯一值。

您可以尝试一个简单的错误检查来避免此错误:

$rows = mysql_query("SELECT X from tablenme WHERE X = Y;");

if(mysql_num_rows($rows) > 0){
    echo 'Error Messege';
}else{
    insert...
}

其中 X 是主键或外键列,Y 是要插入该列的值。

编辑:可能导致问题的一些问题可能是您没有在插入语句中指定某些不能为空的列。喜欢LEVEL_IDUSER_REMEMBER_KEY。它们设置为NOT NULL但未使用插入语句插入值。

我也不明白你为什么'sssssss'在第一列是USER_USERNAME并且它的对应值是时插入$username。也检查一下。

SQL小提琴

于 2012-08-31T20:46:58.123 回答
0

这是因为您试图插入或更新违反约束(如 PK 或 UK)的值,例如

如果您的表有 ID 并且它是 PK 或唯一键,则您只能有一个唯一值......不可能不重复......

使用唯一键,您可以拥有 Null ...但永远不要在同一列中重复值,因为您将打破约束...有关更多信息,请查看http://dev.mysql.com/doc/refman /5.0/es/constraints.html

于 2012-08-31T20:43:49.690 回答
0

如果您收到该错误,则表中确实存在X。显然你没有注意到它,但它就在那里。(检查修剪空格和区分大小写等内容。)

如果您在 phpMyAdmin 中没有收到错误,那么您认为您发送的查询实际上并不是您发送的查询。很可能您正在为该字段发送空白,并且在您执行一次之后,所有进一步的查询都使用相同的空白值。

最简单的检查方法是从表中删除所有内容(如果需要,请先将其复制到其他地方)。然后运行查询并查看实际插入的内容与预期插入的内容。

于 2012-08-31T20:44:42.503 回答
0

您已经定义了PrimaryUnique Key,但您再次尝试插入相同的值。那时由于已经存在相同的值,因此主键或唯一键不可能有冗余值。

是这样的。假设您有一个带有idandnameidas的表primary key。您将第一行插入为:

INSERT INTO `users` (`id`, `name`) VALUES (1, 'Praveen');
INSERT INTO `users` (`id`, `name`) VALUES (1, 'Kumar');

第二个查询违反了id唯一性。

解决方案:如果可能,请尝试截断表,然后再次运行查询。

一些尝试的步骤

  1. 检查是否也违反了具有唯一约束的其他字段。
  2. 查看正在生成什么查询。
  3. 将相同的查询放入phpMyAdmin并检查。
于 2012-08-31T20:45:44.750 回答