gpt4 book ai didi

php - 如果特定属性已存在,则阻止将数据插入数据库

转载 作者:行者123 更新时间:2023-11-30 22:18:09 25 4
gpt4 key购买 nike

我想防止使用 PHP 将表单中的重复值输入到数据库表中。

我在数据库上有一个表data,它有属性dataid(自动递增作为主键)、data1、data2。

我有一个像这样的简单表格

<h2>Enter your data</h2>
<form action="script.php" method="post">
Data 1:<input type="text" name="data1" /></p>
Data 2:<textarea name="data2"></textarea></p>
<input type="submit" name="submit" value="Add Data" />
</form>

script.php用于向数据库中插入数据

<?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());
}
?>

但它会将表单中的任何数据插入数据库。如果 data1 已经存在,如何阻止向数据库插入数据

最佳答案

您的问题的解决方案是使列唯一,以便数据库负责执行此约束。您可以通过创建唯一索引或约束来做到这一点:

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 注入(inject)的影响,这样查询计划就可以被缓存。但那是另一回事。

关于php - 如果特定属性已存在,则阻止将数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com