我想跟踪用户上次登录的时间,所以我在我的数据库中添加了一个带有时间戳的列,每次登录时都可以更新,并在登录功能中添加了更新,但是当我登录时得到一个错误,说'SQLSTATE [HY000]:一般错误',我的数据库没有任何反应,但如果我再次点击登录,它会让我记录正常,并按我的意愿更新表格。 这是我的登录功能:
public function login($email,$upass)
{
try
{
$stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
$stmt->execute(array(":email_id"=>$email));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1)
{
if($userRow['userStatus']=="Y")
{
if($userRow['userPass']==md5($upass))
{
$_SESSION['userSession'] = $userRow['userID'];
$stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
$stmt->execute(array(":email_id"=>$email));
$userRow=$stmt->fetchAll(PDO::FETCH_ASSOC);
return true;
}
任何想法?
答案 0 :(得分:1)
你实际上无法使用" fetchAll"更新后...所以请尝试这样做:
public function login($email,$upass) {
try {
$select_user_stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
$select_user_stmt->execute(array(":email_id"=>$email));
$userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);
if($select_user_stmt->rowCount() == 1) {
if($userRow['userStatus']=="Y") {
if($userRow['userPass'] == md5($upass)) {
$_SESSION['userSession'] = $userRow['userID'];
$update_user_stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
$update_user_stmt->execute(array(":email_id"=>$email));
$select_user_stmt->execute(array(":email_id"=>$email)); // do a search again here...
$userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);
return true;
}
希望这有帮助!