Php 用户使用pdo登录时更新字段

Php 用户使用pdo登录时更新字段,php,pdo,Php,Pdo,这是我的代码: date_default_timezone_set('UTC'); $now = date('l jS \of F Y h:i:s A'); $host = 'localhost'; $dbname = 'myDB'; $username = 'james'; $paswword = '12345'; $dsn = 'mysql:host='. $host .';dbname='. $dbname; try { $connect = new PDO($dsn,

这是我的代码:

date_default_timezone_set('UTC');
$now = date('l jS \of F Y h:i:s A');
$host = 'localhost';
$dbname = 'myDB';
$username = 'james';
$paswword = '12345';
$dsn = 'mysql:host='. $host .';dbname='. $dbname;

try  
{  
    $connect = new PDO($dsn, $username, $password);  
    $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $connect->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    $connect->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);


} catch (PDOException $e) { 
    $message = $e->getMessage()."<br>";
    die();
}

$sql = 'SELECT * FROM people WHERE email = :email && password = :password';
$stmt = $connect->prepare($sql);

$stmt->execute(['email' => $email, 'password' => $pass]);
$result = $stmt->fetch();
if($result)  
{  
        $_SESSION["username"] = $post->firstname;  
        $_SESSION["id"] = $post->id;
        $sql = 'UPDATE people SET last_log_date = :now && WHERE id = :id';
        //error happens here
        $stmt = $connect->prepare($sql);
        $stmt->execute(['last_log_date' => $now, 'id' => $_SESSION["id"]]);
        $connect = null;
        header("location:welcome.php");  
}  
else  
{  
        $connect = null;
        $_SESSION["err_msg"] = 'The password or email does not match';
        header("location:loginForm.php");
}

?>
date\u default\u timezone\u set('UTC');
$now=date('l jS\of F Y h:i:sa');
$host='localhost';
$dbname='myDB';
$username='james';
$paswword='12345';
$dsn='mysql:host='$东道主",;dbname='$数据库名;
尝试
{  
$connect=新PDO($dsn、$username、$password);
$connect->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$connect->setAttribute(PDO::ATTR_DEFAULT_FETCH_模式,PDO::FETCH_OBJ);
$connect->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
}渔获量{
$message=$e->getMessage()。“
”; 模具(); } $sql='从电子邮件=:电子邮件和密码=:密码'的人中选择*; $stmt=$connect->prepare($sql); $stmt->execute(['email'=>$email,'password'=>$pass]); $result=$stmt->fetch(); 如果($结果) { $\会话[“用户名”]=$post->firstname; $\会话[“id”]=$post->id; $sql='updatepeople SET last_log_date=:now&&WHERE id=:id'; //这里发生了错误 $stmt=$connect->prepare($sql); $stmt->execute(['last\u log\u date'=>$now,'id'=>$\u SESSION['id]]); $connect=null; 标题(“位置:welcome.php”); } 其他的 { $connect=null; $\会话[“err_msg”]=“密码或电子邮件不匹配”; 标题(“位置:loginForm.php”); } ?>
我的代码将检查用户是否正确登录,但当我更新上次日志日期时,每次都会出现致命错误。我不明白为什么在获取字段后无法更新它。该错误表示类似于SQLSTATE[42000]:语法错误或访问冲突:


如何在用户登录后正确更新字段。在您的where子句与此无关之前,
&&
将非常感谢您的帮助。删除它(检查SQL语法)

where子句之前的
&&&
与此处无关。删除它(检查SQL语法)

您应该绑定正确的命名参数,即现在的

 $stmt->execute([':now' => $now, ':id' => $_SESSION["id"]]);

您应该绑定正确的命名参数,该参数现在是

 $stmt->execute([':now' => $now, ':id' => $_SESSION["id"]]);

在MySql中是否允许使用
&&
,我一直认为这是不允许的。所以我删除了&&。我想我需要它。我仍然遇到致命错误。看起来您可以使用
&&
Who new。。。英雄联盟8年了,我从来没有使用过它…是
&
甚至在MySql中允许的,我一直认为它是不允许的。所以我删除了&&&。我想我需要它。我仍然遇到致命错误。看起来您可以使用
&&
Who new。。。英雄联盟8年了,我从来没用过它…所以像这样$stmt->execute(['last\u log\u date'=>now(),'id'=>$\u SESSION[“id”]]);那么像这样$stmt->execute(['last\u log\u date'=>now(),'id'=>$\u SESSION[“id”]]);谢谢,但我还是有一个错误。您确定没有其他可能导致问题的原因吗。?我应该先将连接设为null,然后再重新连接吗?错误表明$stmt=$connect->prepare($sql)有问题;更新查询后…谢谢。我终于成功了!我把它绑错了,试了几次后,你的回答对我起了作用。伟大的谢谢,但我还是有一个错误。您确定没有其他可能导致问题的原因吗。?我应该先将连接设为null,然后再重新连接吗?错误表明$stmt=$connect->prepare($sql)有问题;更新查询后…谢谢。我终于成功了!我把它绑错了,试了几次后,你的回答对我起了作用。伟大的