Php 查询正在进行第二次尝试,但不是第一次
我想跟踪用户上次登录的时间,因此我在数据库中添加了一列,该列带有时间戳,可以在每次登录时更新,并在登录函数中添加了一个更新,但当我登录时,我收到一个错误,上面写着“SQLSTATE[HY000]:General error”,我的数据库没有任何变化,但如果我再次单击login,它会很好地将我登录,并根据我的需要更新表。 这是我的登录功能:Php 查询正在进行第二次尝试,但不是第一次,php,mysql,Php,Mysql,我想跟踪用户上次登录的时间,因此我在数据库中添加了一列,该列带有时间戳,可以在每次登录时更新,并在登录函数中添加了一个更新,但当我登录时,我收到一个错误,上面写着“SQLSTATE[HY000]:General error”,我的数据库没有任何变化,但如果我再次单击login,它会很好地将我登录,并根据我的需要更新表。 这是我的登录功能: public function login($email,$upass) { try { $stmt = $this->
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;
}
有什么想法吗?在更新之后,您实际上不能使用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;
}
希望这有帮助 打赌会话只有在设置完成后才会启动。关于如何设置并更新会话,有什么建议吗?检查会话是否先设置,然后运行查询-如果/elseIm仍在挣扎,我认为我考虑过了,你能给我一个带有代码的示例吗?非常感谢!非常感谢。是的,因为我认为我想得太多了,把它嵌套在另一个不必要的if语句中。