PHP MySQL更新查询不会执行

时间:2015-09-27 18:50:16

标签: php mysql

当用户请求重置密码时,我的更新查询出现问题。

它什么都不做,它确实显示密码已根据alert命令重置,但数据库没有反映更新......

任何帮助都会很棒,因为我无法看到我出错的地方......

if(isset($_GET["acc"]) && isset($_GET["np"])){
        $acc=decrypt(htmlspecialchars($_GET["acc"]));
        $np=decrypt(htmlspecialchars($_GET["np"]));
        //var_dump($acc);
        //var_dump($np);

        $query="UPDATE `master_profile` SET `password`=? where `email_address`=?";
            if ($stmt = $connection_link->prepare($query)){ 
                    // Bind the variables to the parameter as strings. 
                    $stmt->bind_param("ss",$np,$acc);
                    // Execute the statement.
                    if($stmt->execute()){
                        ?>
                        <script>
                        alert('Your password has been reset. Please login with your new password.');
                        </script>
                        <?
                        //echo "Updated {$stmt->affected_rows} rows";
                    }else{
                        echo '<h1>An Error Has Occoured. Please try again later.</h1>';
                    }
                    if ($stmt->errno) {
                      echo "FAILURE!!! " . $stmt->error;
                    }
                // Close the prepared statement.
                    $stmt->close();
                }
    }   

更新

按照以下建议更改if($stmt->execute(array($np,$acc))){},但它只是给我一个错误An Error Has Occoured. Please try again later.,我如何捕获此错误并报告正确的错误?

我尝试了$stmt->error;$connection_link->error;,但两者都只是一个空值。

1 个答案:

答案 0 :(得分:0)

因为您使用的是匿名占位符,所以我认为您需要省略绑定语句。相反,您可以将参数作为数组放置在执行中,并按语句

中的出现顺序放置
if($stmt->execute(array($acc, $np)){}

你会省略这一行

$stmt->bind_param("ss",$np,$acc);