2017-03-10 41 views
-1

我有一個簡單的問題後,我用一個類裏面在那裏我有:檢查查詢時從另一個PHP頁面

/////MY CLASS 

public function resetpassword($upass,$tokenrecover,$usermail) 
{ 
    try 
    { 
     global $statreset; 
     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

     $stmt = $this->conn->prepare("UPDATE users SET user_pass = '".$new_password."' WHERE verification_token = '".$tokenrecover."'"); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC);    
     $stmt->bindparam(":upass", $new_password); 
     if ($stmt->execute()){ 
     $statreset ="TRUE"; 
     ...... 

現在,我是新這個東西,也許問題將是愚蠢的,但是當我從另一個頁面運行功能:

  ////OTHER_PAGE.PHP 

      $user->resetpassword($upass,$tokenrecover,$usermail); 
      echo $statreset; 
      if ($statreset =="TRUE"){ 
      echo "query done"; 
      } 

我把變量$ statreset,當我運行在本地主機上一切工作的腳本...但這是正確的方法?我的意思是,我在本地主機上嘗試,如果服務器很慢,該怎麼辦?

if($ statreset ==「TRUE」){將在類的查詢完成時運行?

確實有意義嗎?還有另一種方法可以知道何時以更好的方式完成查詢?

非常感謝您

回答

0

而不是宣佈一個全球性的,爲什麼不能有函數返回一個值?例如,在你的resetpassword()函數:

if ($stmt->execute()) { 
    return "TRUE"; 
} else { 
    return "FALSE"; 
} 

然後在其他網頁:

$statreset = $user->resetpassword($upass,$tokenrecover,$usermail); 
echo $statreset; 
if ($statreset =="TRUE"){ 
    echo "query done"; 
} 

參見:http://php.net/manual/en/functions.returning-values.php

+0

謝謝你,我是新這個東西,但是當我打電話:$用戶> resetpassword($ upass,$ tokenrecover,$ usermail);我稱之爲功能的主頁將等待執行?使「echo $ statreset;」會迴音好嗎?這是有道理的我的問題?謝謝 – Ribis

+0

沒問題!是的,它會等待執行。您對'resetpassword()'的調用將同步運行,並且'resetpassword()'函數內的所有函數調用(包括數據庫訪問調用)也將同步運行。因此,您不需要任何特殊代碼來等待返回值 - 默認情況下,在恢復執行之前,您的代碼已經等待了'resetpassword()'的返回值。 – nb1987

0

還有另一種方式。

resetpassword()沒有返回值。在另一頁沒有得到resetpassword()的執行的結果,如果resetpassword()錯誤,並拋出一個異常。

的resetpassword功能捕獲異常,當它執行

例如

/////MY CLASS 

public function resetpassword($upass,$tokenrecover,$usermail) 
{ 
    try 
    { 
     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

     $stmt = $this->conn->prepare("UPDATE users SET user_pass = '".$new_password."' WHERE verification_token = '".$tokenrecover."'"); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
     $stmt->bindparam(":upass", $new_password); 
     if (!$stmt->execute()){ 
      throw Exception("some error"); 
     } 
     ...... 
    } 



////OTHER_PAGE.PHP 
try{ 
    $user->resetpassword($upass,$tokenrecover,$usermail); 
    echo "query done"; 
} catch(Exception $e){ 
    echo 'Message:' .$e->getMessage(); 
}