php - 防止数据库中的重复,而不是 ID 列

标签 php html mysql sql mysqli

我整个夏天都在使用 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.phphttp://php.net/manual/en/book.pdo.php

关于php - 防止数据库中的重复,而不是 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158192/

相关文章:

php - 在 php 登录 session 中获取用户名

用于 Windows 的 PHP 编译器

php - 什么是 php-common,它有什么作用?

php - Laravel 5 中的 AND 语句 Eloquent

php - 是否可以防止类似页面加载HTML文件时额外加载JS和CSS文件?

javascript - 使用带有sequelizejs的日期来统计客户今年的订单

javascript - 如何在具有多个选择的表单中使用 jquery 设置选定的下拉选项?

javascript - 如何确保 css 边框进入图像内部

javascript - 删除和追加节点

php - Laravel Eloquent,如何从多对多关系中选择某种类型的用户