2012-03-27 112 views
0

如果我已经有了与mysql数据库中完全相同的数据的记录,我不想让php代码再次输入它。
我使用的代码是当从php输入时防止mysql数据库中的数据重复

mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO `tablename` 
VALUES ('2','3','4')); 

它似乎没有工作。问题是什么。

回答

1

执行从MySQL这个查询,并首次创建索引。

ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name); 

然后,你可以因为在MySQL 没有一个CREATE INDEX IF NOT EXISTS他建议从PHP

mysql_query("INSERT IGNORE INTO `tablename` VALUES ('2','3','4')"); 
+0

谢谢。有效。 – user1092042 2012-03-27 09:48:55

2

a)您需要查询之间的分号 B)的mysql_query不支持多个查询 C)的mysql_query有语法错误,应该是mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO表名VALUES ('2','3','4')");

+0

那我该怎么做呢。 – user1092042 2012-03-27 09:29:22

+1

执行'ALTER TABLE tablename ADD UNIQUE INDEX(pageid,name)''然后使用'mysql_query(“INSERT IGNORE INTO tablename VALUES('2','3','4')”);'在脚本中 – dotoree 2012-03-27 09:36:09

+0

谢谢。这工作 – user1092042 2012-03-27 09:48:19

0

检查从大卫·奥布莱恩的评论HERE执行插入查询...

基本上使用这种程序:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `create_index_if_not_exists`$$ 

CREATE DEFINER=`user`@`%` PROCEDURE `create_index_if_not_exists`(table_name_vc varchar(50), index_name_vc varchar(50), field_list_vc varchar(200)) 
SQL SECURITY INVOKER 
BEGIN 

set @Index_cnt = (
select count(1) cnt 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE table_name = table_name_vc 
and index_name = index_name_vc 
); 

IF ifnull(@Index_cnt,0) = 0 THEN set @index_sql = concat('Alter table ',table_name_vc,' ADD INDEX ',index_name_vc,'(',field_list_vc,');'); 

PREPARE stmt FROM @index_sql; 
EXECUTE stmt; 

DEALLOCATE PREPARE stmt; 

END IF; 

END$$ 
DELIMITER ; 

然后调用它像

call create_index_if_not_exists('tablename','indexname','thisfield,thatfield'); 
0

你可以做类似这样的:

$specifieddata = //the value(s) you want to check 

$checkquery = "SELECT * FROM tablename WHERE yourdata = $specifieddata"; 
$resultcheck = mysql_query($checkquery); 

//if the database contains the same values as given in $specifieddata; mysql_fetch_row should be 1 (or more) 
if(mysql_fetch_row($resultcheck) >= 1) 
{ 
    //your error(?) code 
} 

else 
{ 
    //your INSERT code 
} 

此外,注意到你要净化你的输入

的原因,它可能是值得我建议这样做是因为你可以给用户一个(如果你想要详细的)关于错误的错误。