【发布时间】:2014-12-16 03:39:38
【问题描述】:
当我的用户在活动模型中登录时。如果用户在更新属于用户 ID 的行之前已经登录。否则应该插入行。
问题:目前它只更新与以前相同的行。如果用户 id 之前没有登录过,它应该插入一个新行。
如何解决模型问题。
<?php
class Model_account_activity extends CI_Model {
public function updateActivity($key, $data) {
$data['user_id'] = $this->session->userdata('user_id');
if (isset($data['user_id'])) {
$user_id = $data['user_id'];
} else {
$user_id = 0;
}
$query = $this->db->query("UPDATE `" . $this->db->dbprefix . "user_activity` SET
`user_id` = '" . (int)$user_id . "',
`key` = " . $this->db->escape($key) . ",
`data` = " . $this->db->escape(serialize($data)) . ",
`date_added` = NOW()
");
if ($query == FALSE) {
$this->addActivity();
return true;
} else {
return false;
}
}
public function addActivity($key, $data) {
$data['user_id'] = $this->session->userdata('user_id');
if (isset($data['user_id'])) {
$user_id = $data['user_id'];
} else {
$user_id = 0;
}
$this->db->query("INSERT INTO `" . $this->db->dbprefix . "user_activity` SET
`user_id` = '" . (int)$user_id . "',
`key` = " . $this->db->escape($key) . ",
`data` = " . $this->db->escape(serialize($data)) . ",
`date_added` = NOW()
");
}
}
【问题讨论】:
-
你的意思是
REPLACE INTO ...吗? -
在我看来,您的 UPDATE 查询无论如何都会运行。条件应该在查询之前。你能提供更多信息吗?
-
我还看到您在调用 addActivity 函数时缺少参数。你能提供更多信息吗?
-
如果你使用 MySQL,你可以使用
ON DUPLICATE KEY UPDATE。这会缩短你的代码。 -
@Diego Camacho 如果
user id在该表中不存在,它应该插入一个新行,否则这将是我想要实现的更新
标签: php codeigniter