我正在尝试将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
答案 0 :(得分: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是要插入该列的值。
编辑:可能导致此问题的一些问题可能是您没有在insert语句中指定某些不能为null的列。
与LEVEL_ID
和USER_REMEMBER_KEY
一样。它们设置为NOT NULL
,但未使用insert语句插入值。
当第一列为'sssssss'
且其对应值为USER_USERNAME
时,我也不明白为什么要插入$username
。请检查一下。
答案 1 :(得分:0)
那是因为您试图插入或更新违反约束的值(例如PK或UK),例如
如果你的桌子有ID,它是PK或唯一钥匙,你只能有一个独特的价值......不可能没有重复....
使用唯一键,您可以使用Null ...但不要在同一列中重复值,因为您将破坏约束...有关详细信息,请查看http://dev.mysql.com/doc/refman/5.0/es/constraints.html
答案 2 :(得分:0)
如果您收到该错误,则表中存在X 。显然你没有注意到它,但它就在那里。 (检查修剪空格和区分大小写等内容。)
如果您没有在phpMyAdmin中收到错误,那么您认为发送的查询实际上并不是您要发送的查询。很可能您为该字段发送空白,并且在您执行一次之后,所有进一步的查询都使用相同的空白值。
最简单的检查方法是从表中删除所有内容(如果需要,请先将其复制到其他位置)。然后运行查询,看看实际插入了什么以及插入的内容。
答案 3 :(得分:0)
您已经定义了主要或唯一键,但您又尝试插入相同的值。那个时候因为已经存在相同的值,所以不可能为主键或唯一键设置冗余值。
就是这样的。假设您有一个包含id
和name
的表格,其中id
为primary key
。您将第一行插入:
INSERT INTO `users` (`id`, `name`) VALUES (1, 'Praveen');
INSERT INTO `users` (`id`, `name`) VALUES (1, 'Kumar');
第二个查询违反了id
唯一性。