2012-03-27 47 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 
} 

此外,注意到你要淨化你的輸入

的原因,它可能是值得我建議這樣做是因爲你可以給用戶一個(如果你想要詳細的)關於錯誤的錯誤。

相關問題