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。我不使用
绑定参数
,而是通过数组执行。就像我说的,只是略有不同。我只是把它扔出去,作为一种你可以尝试的方式,以防它因为某种原因起作用,对不起。