当用户请求重置密码时,我的更新查询出现问题。
它什么都不做,它确实显示密码已根据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;
,但两者都只是一个空值。
答案 0 :(得分:0)
因为您使用的是匿名占位符,所以我认为您需要省略绑定语句。相反,您可以将参数作为数组放置在执行中,并按语句
中的出现顺序放置if($stmt->execute(array($acc, $np)){}
你会省略这一行
$stmt->bind_param("ss",$np,$acc);