2013-04-03 136 views
0

我创建了一个表:更新或插入值

$this->db->query('CREATE TABLE IF NOT EXISTS `'.DB_PREFIX.'ct_forum_settings` (
`admin_online` int(1) NOT NULL default \'0\' 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
'); 

,我想当插入或更新的用户登录,如果该行犯规存在的1或0的值,如果用户已经登录出。

登录

@mysql_query ("REPLACE INTO " . DB_PREFIX . "ct_forum_settings (admin_online) VALUES(1) ON DUPLICATE KEY UPDATE admin_online='1'"); 

注销

@mysql_query ("REPLACE INTO " . DB_PREFIX . "ct_forum_settings (admin_online) VALUES(0) ON DUPLICATE KEY UPDATE admin_online='0'"); 

我唯一的问题是我插入试图进入并更换成,但他们只是不停地创造1和0的行我只需要更新的行如果它不存在。

有什么想法吗?

回答

1

对于REPLACEON DUPLICATE UPDATE你需要给你的表一个唯一的键(通常主键是你所需要的)。
一旦u有这一点,你也会使用相同的值的用户(比如,调用场id并使其auto increment),将工作

$this->db->query('CREATE TABLE IF NOT EXISTS `'.DB_PREFIX.'ct_forum_settings` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`admin_online` int(1) NOT NULL default \'0\' 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
'); 

如果u有只有一个入口,没必要为自动增量,但那么你将不得不手动设置ID。

+0

这个工作,但我不得不删除AUTO_INCREMENT。 Thanx –

+0

是的,如果你只有一个条目,不需要自动增量 –

0

你可以尝试改变REPLACE INTO

插入:

mysql_query("INSERT INTO `table` (`id`, `file_name`, `directory`) VALUES (NULL, '$filename', '$directory')"); 

为updateing:

mysql_query("UPDATE `table` SET `file_name` = '$filename', `directory` = '$directory' WHERE `id` = id")