Php MySQLi更新查询问题
当用户成功登录页面时,我的页面将Php MySQLi更新查询问题,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,当用户成功登录页面时,我的页面将登录时间设置为NOW(),将登录时间设置为1。我想做的是,当用户也注销时,将signout\u time设置为NOW()。为此,我使用以下查询 $stmt = $db->prepare("UPDATE `ulog` SET `logged_in`=0, `signout_time`=NOW(),`ckey`= '', `ctime`= '' WHERE user_id=? AND logged_in=1") or die($db->error); 我
登录时间设置为NOW()
,将登录时间设置为1。我想做的是,当用户也注销时,将signout\u time
设置为NOW()
。为此,我使用以下查询
$stmt = $db->prepare("UPDATE `ulog` SET `logged_in`=0, `signout_time`=NOW(),`ckey`= '', `ctime`= '' WHERE user_id=? AND logged_in=1") or die($db->error);
我试图执行这个查询。它并没有返回任何错误消息,但我也并没有注意到db表中有任何更改,php错误日志也并没有显示任何内容
可能我有语法错误(我正在设置logged\u in=0,其中logged\u in=1
)。我不知道该怎么做。也许我应该搜索注销时间=0
的行?有什么建议吗
更新
以下是整个功能:
function logout() {
global $db, $wsurl;
if (isset($_SESSION['user_id'])) {
$userid = $_SESSION['user_id'];
$stmt = $db->prepare("UPDATE `ulog` SET `logged_in`=0, `signout_time`=NOW() WHERE user_id=? AND logged_in=1") or die($db->error);
} else {
$userid = $_COOKIE['user_id'];
$stmt = $db->prepare("UPDATE `ulog` SET `logged_in`=0, `signout_time`=NOW(),`ckey`= '', `ctime`= '' WHERE user_id=? AND logged_in=1") or die($db->error);
}
$stmt->bind_param("i", $userid) or die($stmt->error);
$stmt->execute() or die($stmt->error);
$stmt->close();
$_SESSION = array(); //destroy all of the session variables}
session_destroy();
foreach ($_COOKIE as $c_id => $c_value) {
setcookie($c_id, '', 1, "/");
}
header("Location: " . $wsurl);
}
您必须执行查询
$userId = 1; // some number
$stmt->execute(array($userId));
或者,您可以使用方法链接将它们组合为一个:
$db->prepare(
"UPDATE `ulog` SET `logged_in`=0, `signout_time`=NOW(),
`ckey`= '', `ctime`= '' WHERE user_id=? AND logged_in=1"
)->execute(array($userId));
另外,请确保已设置您的$userid
。在上面做一个var\u dump()
,看看你得到了什么。你有没有尝试过不同的准备/执行方法,我的方法似乎和你的略有不同。。。并不是说它一定会奏效,但我想值得一试
function logout() {
global $db, $wsurl;
if (isset($_SESSION['user_id'])) {
$userid = $_SESSION['user_id'];
$stmt = $db->prepare("UPDATE `ulog`
SET `logged_in` = 0,
`signout_time` = NOW()
WHERE `user_id` = :userid
AND `logged_in` = 1") or die($db->error);
} else {
$userid = $_COOKIE['user_id'];
$stmt = $db->prepare("UPDATE `ulog`
SET `logged_in` = 0,
`signout_time` = NOW(),
`ckey` = '',
`ctime` = ''
WHERE `user_id` = :userid
AND `logged_in` = 1") or die($db->error);
}
$dataArray = array(':userid' => $userid);
$stmt->execute($dataArray);
$stmt->close();
$_SESSION = array();
session_destroy();
foreach ($_COOKIE as $c_id => $c_value) {
setcookie($c_id, '', 1, "/");
}
header("Location: " . $wsurl);
}
更新问题。请看一看。当然,我绑定了userid,然后我回显了它给我的真实数字。为什么是阵列?它是1,也是唯一的数字。你试着用try/catch包装它吗?可能您的$userid
未设置。。请尝试var\u dump($userid)
并告诉我您得到了什么。在绑定$userid之前,您是否仔细检查了它的值?查询本身似乎很好。您的$user\u id
是什么样的?我回显了它给我的真实数字的用户id。我不使用绑定参数
,而是通过数组执行。就像我说的,只是略有不同。我只是把它扔出去,作为一种你可以尝试的方式,以防它因为某种原因起作用,对不起。