我想使用PHP防止表单中的重复值进入数据库表。
我在数据库上有一个表 data ,它有一个属性dataid(自动增量为主键),data1,data2。
我有一个像这样的简单表格
<?php
if(isset($_POST['submit']))
{
//connect to the database
$conn = mysql_connect('host', 'username', 'password', 'dbname') or die(mysql_error());
//insert results from the form input
$query = "INSERT INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')";
$result = mysql_query($conn, $query) or die(mysql_error());
}
?>
script.php 用于将数据插入数据库
Math.Round(value, 2, MidpointRounding.AwayFromZero)
但它会将表单中的任何数据插入数据库。 如果data1已经存在,如何阻止将数据插入数据库?
答案 0 :(得分:0)
您的问题的解决方案是使列唯一,以便数据库负责执行此约束。您可以通过创建唯一索引或约束来完成此操作:
alter table data add constraint unq_data_data1 unique (data1);
然后,您可以在insert
中使用此功能,以使用on duplicate key update
忽略重复项:
INSERT INTO data(data1, data2)
VALUES('$_POST[data1]', '$_POST[data2]')
ON DUPLICATE KEY UPDATE data1 = VALUES(data1);
ON DUPLICATE KEY
部分并没有真正做任何事情。这是一个无操作。
此外,您应该参数化您的查询,这样您就不会受到SQL注入的影响,因此可以缓存查询计划。但那是另一回事。
答案 1 :(得分:0)
使列data1唯一
ALTER TABLE `data` ADD UNIQUE (`data1`);
更改您的查询,以便在数据存在时忽略插入
$query = "INSERT IGNORE INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')";