【发布时间】:2016-05-14 15:05:58
【问题描述】:
好的..事情就是这样。我想列出已登录的用户并在注销时更改其状态。这很完美。我为此创建了一个名为 tblaudit_users 的表。我从 tbl_users 表中选择的现有用户。
我想要的是,如果用户已经存在于 tblaudit_users 表中,它将使用 NOW() 更新 LastTimeSeen 时间。但它不会更新该记录,而是创建一个新记录。这样桌子就会越来越大,我想避免这种情况。我用于此的代码如下所示:
++++++++++++++++++++++
$ipaddress = $_SERVER['REMOTE_ADDR'];
if(isset($_SESSION['id'])){
$userId = $_SESSION['id'];
$username = $_SESSION['username'];
$achternaam = $_SESSION['achternaam'];
$district = $_SESSION['district'];
$gemeente = $_SESSION['gemeente'];
$query = $db->prepare("SELECT * FROM tblaudit_users WHERE username = '{$username}' AND active = '1' LIMIT 1");
$query->execute();
foreach($query->fetchAll(PDO::FETCH_OBJ) as $value){
$duplicate = $value->username;
}
if($duplicate != 1){
$insert = $db->prepare("
INSERT INTO tblaudit_users (user_id, username, achternaam, district, gemeente, ipaddress, LastTimeSeen, status)
VALUES ('{$userId}', '{$username}', '{$achternaam}', '{$district}', '{$gemeente}', '{$ipaddress}', NOW(), '1')
");
$insert->execute();
} elseif($duplicate = 1){
$update = $db->prepare("UPDATE tblaudit_users SET LastTimeSeen = NOW(),status = '1' WHERE username = '{$username}'");
$update->execute();
} else {
header('Location: index.php');
die();
}
}
我迷路了,搜索了很多网站/页面来解决这个问题,所以希望这里有人可以帮助我?提前致谢!!
更新:
我尝试了以下没有结果。
+++++
$insert = $db->prepare("
INSERT INTO tblaudit_users (user_id, username, achternaam, district, gemeente, ipaddress, LastTimeSeen, status)
VALUES ('{$userId}', '{$username}', '{$achternaam}', '{$district}', '{$gemeente}', '{$ipaddress}', NOW(), '1')
ON DUPLICATE KEY UPDATE set LastTimeSeen = NOW(), status = '1'
");
$insert->execute();
好的。我稍微修改了查询和代码:
$query = $db->prepare("SELECT * FROM tblaudit_users WHERE username = '{$username}' LIMIT 1");
$query->execute();
if($query){
$insert = $db->prepare("
INSERT INTO tblaudit_users (user_id, username, achternaam, district, gemeente, ipaddress, LastTimeSeen, status)
VALUES ('{$userId}', '{$username}', '{$achternaam}', '{$district}', '{$gemeente}', '{$ipaddress}', NOW(), '1')
ON DUPLICATE KEY UPDATE set LastTimeSeen = NOW(), status = '1'
");
$insert->execute();
} else {
header('Location: index.php');
die();
}
}
我还添加了一个名为 pid(主 id)的唯一键。还是不行。
【问题讨论】:
-
你试过MySQL语句语法
INSERT ... ON DUPLICATE KEY UPDATE吗?如果没有,请尝试一下。如果是这样,请edit您的问题以展示您的尝试 -
@David:我已经尝试过了,但它不起作用。还从 $query 中删除了一些 WHERE 子句。 WHERE active='1' 不是表中的列。
-
tblaudit_users有主键/唯一键吗? -
好像找不到$username的记录。我的猜测是我的“if”语句是错误的,但不知道为什么
-
并且userid被设置为key?