Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL插入唯一值_Php_Mysql_Forms - Fatal编程技术网

Php MySQL插入唯一值

Php MySQL插入唯一值,php,mysql,forms,Php,Mysql,Forms,我有一个MySQL表,它有一列将自动递增,另一列存储用户提交的数据,另一列默认为当前时间戳 我的INSERT查询是: $query = $db->prepare("INSERT IGNORE INTO `UserData` (`user_data`) VALUES(?)"); $query->bind_param('s', $commentdata); $query->execute(); 但是,它仍在插入重复的值(如果用户多次单击提交)。防止出现这种情况的最佳方法是什么?防

我有一个MySQL表,它有一列将
自动递增
,另一列存储用户提交的数据,另一列默认为
当前时间戳

我的
INSERT
查询是:

$query = $db->prepare("INSERT IGNORE INTO `UserData` (`user_data`) VALUES(?)");
$query->bind_param('s', $commentdata);
$query->execute();

但是,它仍在插入重复的值(如果用户多次单击提交)。防止出现这种情况的最佳方法是什么?

防止MySQL表中出现重复值的最佳方法是让表定义使用
UNIQUE
PRIMARY
约束。看


如果计划使用该值执行查找,您可能还希望该值为
键。

防止MySQL表中出现重复值的最佳方法是让表定义使用
唯一的
约束。看


如果您计划使用该值执行查找,您可能还希望该值是一个
键。

MySQL不会创建重复的自动增量ID(除非您有一个配置非常糟糕的集群),因此您引用的重复项可能位于不同的属性中-您只告诉了我们用户数据

如果不想在其中重复,请在列上添加唯一索引。您还应该添加错误处理,以在出现这种情况时处理失败,并删除“忽略”


但是,您还需要考虑您的控制逻辑(这暗示您可能存在csrf漏洞)和您的用户界面(为什么允许用户提交相同的表单两次?

MySQL不会创建重复的自动增量ID(除非您的群集配置非常糟糕)因此,您引用的副本可能位于不同的属性中-您只告诉我们有关用户_数据的信息

如果不想在其中重复,请在列上添加唯一索引。您还应该添加错误处理,以在出现这种情况时处理失败,并删除“忽略”


但是,您还需要考虑您的控制逻辑(这暗示您可能存在csrf漏洞)和您的用户界面(为什么您允许用户提交相同的表单两次?

我最后使用了以下查询:

INSERT INTO `UserData` (`post_num`, `user_data`)
SELECT ?, ? FROM `UserData`
WHERE NOT EXISTS (
    SELECT * FROM `UserData` WHERE `post_num`= ? AND `user_data`=?
) LIMIT 1
然后我执行
$query->bind_参数('isis',$post_number,$comment,$post_number,$comment)以绑定值

这将检查以确保帖子上没有重复的评论


请注意,我的实际示例插入了更多信息,如用户信息,我检查以确保某个用户在特定帖子上没有重复的评论。

我最后使用了以下查询:

INSERT INTO `UserData` (`post_num`, `user_data`)
SELECT ?, ? FROM `UserData`
WHERE NOT EXISTS (
    SELECT * FROM `UserData` WHERE `post_num`= ? AND `user_data`=?
) LIMIT 1
然后我执行
$query->bind_参数('isis',$post_number,$comment,$post_number,$comment)以绑定值

这将检查以确保帖子上没有重复的评论


请注意,我的实际示例会插入更多信息,例如用户信息,我会检查以确保某个用户在特定帖子上没有重复的评论。

表def是?如果让用户插入他想要的任何值,您将得到重复的错误!。您的意思是要为每次单击生成随机唯一值吗?从“用户体验”的角度来看,“最好的方法”不是使用
忽略
,而是在每次插入前检查数据库中是否已经存在条目,并告诉用户是否存在。您的
绑定参数
调用是错误的
sss
表示有3个参数被绑定,但您在查询中只有1个参数。@Barmar:您是对的。在泛化此查询时忘记删除其他表值。而表定义是?如果让用户插入他想要的任何值,则会出现重复错误!。您的意思是要为每次单击生成随机唯一值吗?从“用户体验”的角度来看,“最好的方法”不是使用
忽略
,而是在每次插入前检查数据库中是否已经存在条目,并告诉用户是否存在。您的
绑定参数
调用是错误的
sss
表示有3个参数被绑定,但您在查询中只有1个参数。@Barmar:您是对的。在泛化此查询时忘记删除其他表值。可能是用户双击了“提交”按钮。可能是用户双击了“提交”按钮。