【问题标题】:Check when a QUERY is done from another PHP page检查何时从另一个 PHP 页面完成查询
【发布时间】:2017-07-31 05:28:00
【问题描述】:

我有一个简单的问题,我在里面使用了一个类:

/////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,当我在 localhost 上运行脚本时,一切正常……但这是正确的方法吗?我的意思是,我在 localhost 中尝试,如果服务器很慢怎么办?

if ($statreset =="TRUE"){ 将在类查询完成时运行?

这有意义吗?还有另一种方法可以知道查询何时以更好的方式完成?

非常感谢

【问题讨论】:

    标签: php mysql sql class mysqli


    【解决方案1】:

    与其声明一个全局变量,不如让函数返回一个值?例如,在您的 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

    【讨论】:

    • 谢谢,我是新手,但是当我打电话时: $user->resetpassword($upass,$tokenrecover,$usermail);我调用该功能的主页将等待执行?以便“回声 $statreset;”回声会好吗?我的问题有意义吗?谢谢
    • 没问题!是的,它将等待执行。您对resetpassword() 的调用将同步运行,resetpassword() 函数内的所有函数调用(包括数据库访问调用)也将同步运行。因此,您不需要任何特殊代码来等待返回值——默认情况下,您的代码在恢复执行之前已经等待resetpassword() 的返回值。
    【解决方案2】:

    还有另一种方法。

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2012-01-25
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多