更新或插入值

时间:2013-04-03 11:53:37

标签: mysql

我创建了一个表格:

$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的行我只需要更新行,如果它不存在。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

对于REPLACEON DUPLICATE UPDATE,您需要为表格提供一个唯一的密钥(通常主键是您需要的)。
一旦你有了这个,你将为用户使用相同的值(比如,调用字段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;
'); 

如果你只有一个条目,不需要自动增量,但是你必须手动设置id。

答案 1 :(得分:0)

您可以尝试更改REPLACE INTO

用于插入:

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

用于更新:

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