php - 通过PHP避免Mysql中的重复
问题描述
我的数据库中有下表:
CREATE TABLE subjects (
subject_id int(11) NOT NULL AUTO_INCREMENT,
subject text,
PRIMARY KEY (subject_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;
我还从这个 PHP 插入表数据,它工作正常:
<?php
include('Conexion.php');
$subject = "";
if (isset($_POST['reg_subject'])) {
$text = $_POST['text'];
$query = "INSERT INTO subjects (subject) VALUES('$text')";
mysqli_query($conn, $query);
header("Location: index.PHP");
}
?>
问题是用户可以输入重复的主题,我想避免这种情况。
如果主题已经存在,我试图显示一条警报消息,但它继续接受重复的主题。我怎样才能避免同名的重复主题?
这就是我的做法:
<?php
include('Conexion.php');
$subject = "";
if (isset($_POST['reg_subject'])) {
$text = $_POST['text'];
$subject_check_query = "SELECT * FROM subjects WHERE subject='$subject'";
$result = mysqli_query($conn, $subject_check_query);
$text = mysqli_fetch_assoc($result);
$message = "Already Exists";
if ($text) { // if subject exists
if ($text['text'] === $subject) {
echo "<script type='text/javascript'>alert('$message');</script>";
}
}else{
$query = "INSERT INTO subjects (subject) VALUES('$text')";
mysqli_query($conn, $query);
header("Location: index.php");}
}
?>
解决方案
您可以为列创建唯一索引subject_text
:
ALTER IGNORE TABLE subjects ADD UNIQUE (subject_text)
然后将您的查询更改为以下任一项:
"INSERT IGNORE INTO subjects (subject_text) VALUES('$text')"
或者:
"INSERT INTO subjects (subject_text) VALUES('$text')
ON DUPLICATE KEY UPDATE subject_text = subject_text"
请注意,如果您的数据库已经有重复值,这将不起作用。
有关这两个答案之间差异的解释,您可以查看此问题。
推荐阅读
- reactjs - Camunda:如何使用 ReactJS fetch 部署进程
- laravel-7 - 将作曲家安装到 Laravel 7 时出现问题
- python - Pyodbc:插入时出现 SQLExecDirectW 错误
- redux - 使用 redux 从库组件访问主机存储
- python - 查找目录树结构中所有无效的json文件
- c# - 在 net.tcp://url 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的
- ios - 在我的应用中实施时 XLPagerTabStrip 出现问题
- python - 选择特征后打印列/变量名
- discord.py - How do I make my logs server specific | discord.py
- python - 带有 nginx 和 gunicorn curl 的烧瓶:(56) Recv failure: Connection reset by peer