如果我已經有了與mysql數據庫中完全相同的數據的記錄,我不想讓php代碼再次輸入它。
我使用的代碼是當從php輸入時防止mysql數據庫中的數據重複
mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO `tablename`
VALUES ('2','3','4'));
它似乎沒有工作。問題是什麼。
如果我已經有了與mysql數據庫中完全相同的數據的記錄,我不想讓php代碼再次輸入它。
我使用的代碼是當從php輸入時防止mysql數據庫中的數據重複
mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO `tablename`
VALUES ('2','3','4'));
它似乎沒有工作。問題是什麼。
執行從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')");
a)您需要查詢之間的分號 B)的mysql_query不支持多個查詢 C)的mysql_query有語法錯誤,應該是mysql_query(" ALTER TABLE tablename ADD UNIQUE INDEX(pageid, name) INSERT IGNORE INTO
表名VALUES ('2','3','4')");
那我該怎麼做呢。 – user1092042 2012-03-27 09:29:22
執行'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
謝謝。這工作 – user1092042 2012-03-27 09:48:19
檢查從大衛·奧布萊恩的評論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');
你可以做類似這樣的:
$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
}
此外,注意到你要淨化你的輸入
的原因,它可能是值得我建議這樣做是因爲你可以給用戶一個(如果你想要詳細的)關於錯誤的錯誤。
謝謝。有效。 – user1092042 2012-03-27 09:48:55