如果我已经在mysql数据库中记录了完全相同的数据,我不希望php代码再次输入。
我正在使用的代码是
mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO `tablename`
VALUES ('2','3','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
}
此外,值得注意的是,您需要清理输入
我建议这样做的原因是你可以给用户一个(如果你想要详细的)错误。