我整个夏天都在使用 Stack Overflow 来让我的网页项目上线,我已经受够了,所以我把它公开了。然而我的鞋子里有一 block 小石头我想修复。
我已尝试了此处找到的所有 INSERT IGNORE 建议,以防止在除 ID(这是主列)之外的行中重复输入数据。我的网页是 www.lostdots.com ,我想防止有人输入相同的域名两次,因为这会让数据库看起来不整洁。
我用过:
PRIMARY KEY (id, namebox1))");
foreach($form_data as $name=>$value)
{
mysql_query("ALTER TABLE $mysql_table ADD $name VARCHAR(255)");
}
mysql_query("INSERT IGNORE INTO
$mysql_table (`DATESTAMP`, `TIME`, `IP`, `BROWSER`)
VALUES ('".date("Y-m-d")."',
'".date("G:i:s")."',
我了解到,通过将“namebox1”设为主键,可以防止重复,而“插入忽略”将防止报告错误。那么我做错了什么?我知道我应该已经转向 MySQLi,但我想一次跨过一座桥。大师们有什么想法吗?
谢谢, 阿拉斯泰尔
最佳答案
只需在列上设置唯一索引即可。
如果您有 PHPMyAdmin,只需单击要设置唯一的列下的“唯一”。您可以在目标表的“结构”概述下找到该按钮。
如果您没有 PHPMyAdmin,您可以通过使用原始查询更改架构来解决此问题:
ALTER TABLE `table_name` ADD UNIQUE (`column_name`);
瞧,你就完成了。 MySQL 将不再接受目标列中的任何重复值。
当然,您应该使用前面的选择通知(“电子邮件已被占用”或此唯一索引的用途)函数来验证您的插入,并生成自定义错误消息,因为当然,如果您尝试插入重复值mysql会抛出错误,这可能会让您和用户感到困惑,特别是当您使用诸如
之类的结构时$result = mysql_query(...);
if($result == false) die("An error occured");
请注意,只有在给出索引所需的完整性的情况下,这才有效,这几乎意味着:表中目前不得有重复值,否则您无法设置索引。如果表中已经有重复的数据,您应该考虑是否可以删除数据或手动更改所有键。
(请记住,如果该列设置为可为空(它包含 NULL 值),则无论索引显示什么内容,该值都可能始终出现多次)。
最后要提到的是:mysql_query 是一个已弃用的库,将来将会被删除。请考虑升级到更节省、性能更高且更易于处理的库 http://php.net/manual/en/book.mysqli.php或http://php.net/manual/en/book.pdo.php
关于php - 防止数据库中的重复,而不是 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158192/