php - 防止 MYSQL 中的重复

标签 php mysql

我正在运行一个脚本来在表中插入数据,但我也想运行相同的脚本,但不重复插入的数据:

这是我的代码,由于某种原因,当我运行它时它不起作用,它仍然添加更多相同的数据。

$query = 'INSERT IGNORE INTO tbl_scrape_main ( 
   `scrape_main_id`, 
   `tbl_sc_date`,
   `tbl_sc_date_added`, 
   `tbl_sc_url`, 
   `tbl_sc_url_title`,
   `tbl_sc_new`, 
   `tbl_sc_title`, 
   `tbl_sc_town`, 
   `tbl_sc_state` 
) VALUES ( 
    '.sql_val($scrape_main_id).', 
   '.sql_val($temp['date']).',
   '.sql_val($date_added).', 
   '.sql_val($temp['url']).', 
   '.sql_val($temp['url_title']).',
   '.sql_val($temp['new_entry']).',
   '.sql_val($temp['title']).', 
   '.sql_val($temp['town']).', 
   '.sql_val($temp['state']).' 
)
ON DUPLICATE KEY UPDATE 
     `scrape_main_id` = '.sql_val($scrape_main_id).', 
     `tbl_sc_date_added` = '.sql_val($temp['date']).', 
     `tbl_sc_date` = '.sql_val($date_added).', 
     `tbl_sc_url` = '.sql_val($temp['url']).', 
     `tbl_sc_url_title` = '.sql_val($temp['url_title']).', 
     `tbl_sc_new` = '.sql_val($temp['new_entry']).', 
     `tbl_sc_title` = '.sql_val($temp['title']).', 
     `tbl_sc_town` = '.sql_val($temp['town']).', 
     `tbl_sc_state` = '.sql_val($temp['state']).'
'; 
$result = mysql_query($query) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query."<br />Error: (".mysql_errno().") ".mysql_error());

可能是什么问题。

最佳答案

了解表上的键是什么确实有助于完全回答问题,但查询的一个问题是您同时使用 INSERT IGNORE 和 ON DUPLICATE KEY UPDATE。您不应该同时使用两者,因为第一个告诉 MySQL 如果遇到重复行则忽略新行(这听起来像是您想要的行为),而第二个告诉 MySQL 如果遇到重复则要更新原始行中的哪些字段。

根据您的描述(“它仍然添加更多相同的数据”),听起来您表上的唯一键不是您期望的那样。

运行此命令以查看表上的键,并确保 UNIQUE 键是您期望的键(即:不应重复的键):SHOW CREATE TABLE tbl_scrape_main;

例如,如果您认为某行“scrape_main_id”与另一行相同,则该行需要一个唯一键。如果相反,如果( scrape_main_id, tbl_sc_date_added )的组合相同,则您认为一行是重复的,那么这些需要是您的唯一键......依此类推。查看this answer了解更多。

关于php - 防止 MYSQL 中的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450184/

相关文章:

php - sql表如何将从sql表中获取的数字数组相乘并存储到数组中并返回

mysql - 尝试显示某个值在数据集中出现的实例总数

php - 请帮我获取 $randomQ 和 $matchinA,然后在输入 $matchinA 时刷新 jQuery?

php - 更新 map 标记而不刷新页面 - 传单

php - 我将如何读取此数组 ("stdClass Object")

MySQL 查询预订系统 - 如果房间已预订则删除条目

mysql - 计数 substring_index

php - 我可以使用 phpQuery 找到完全匹配吗?

php - javascript 中的变量,自动填充表单

php - IF 文件存在 JavaScript