从php输入时,防止mysql数据库中的数据重复

时间:2012-03-27 09:23:09

标签: php mysql

如果我已经在mysql数据库中记录了完全相同的数据,我不希望php代码再次输入。
我正在使用的代码是

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

它似乎无法奏效。有什么问题。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

从MySQL执行此查询并首先创建索引。

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

然后您可以从PHP

执行插入查询
mysql_query("INSERT IGNORE INTO `tablename`  VALUES ('2','3','4')");

答案 2 :(得分:0)

检查David OBrien的评论HERE ......

基本上因为在MySQL 中没有一个CREATE INDEX IF NOT EXISTS他建议使用这种程序:

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');

答案 3 :(得分: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
}

此外,值得注意的是,您需要清理输入

我建议这样做的原因是你可以给用户一个(如果你想要详细的)错误。