mySQL:比较当前密码,然后在1个查询中更新为新密码?

时间:2011-11-30 17:28:04

标签: php mysql sql-update

我正在用PHP编写脚本以允许用户更改其密码。我让他们输入他们的旧密码(即使他们已经登录)然后输入新密码。我正在尝试比较旧密码,然后将字段更新为新密码,而不运行两个单独的查询,但我的代码不能像我预期的那样工作。这里有错误吗?或者由于某种原因这是不允许的?你有什么建议?

mysql_query("UPDATE users SET userpass = '$encryptedPW' WHERE userid = '$uid' AND userpass = '$currentPW'");

我可以看看mySQL是否按照它们编写的顺序执行了任务,但它必须找到该行才能更新,对吧?

非常感谢!

比利

ETA:对不起!错字!

3 个答案:

答案 0 :(得分:2)

实际生成的查询是什么样的?您是否检查了查询查询是否成功?

$result = mysql_query("UPDATE ....") or die(mysql_error());
if (mysql_affected_rows() != 1) {
   die("Failed to change password");
}

or die()部分将处理任何sql语法错误,而affected_rows将检查某些内容是否已更新。如果受影响的行数不是1(假设您不允许重复的用户名/密码对),那么某些内容无法正常工作。 0 =没有受影响的行,没有进行任何更改。 > 1 =您有重复的用户/密码对。

还要确保你是苹果的苹果。如果您以加密/散列形式存储密码,那么您必须比较散列/加密密码才能使结果有意义。

... WHERE password='letmein'
如果密码实际存储为加密二进制垃圾,

将失败。

答案 1 :(得分:0)

从您的代码

,我看到您使用加密密码。检查您是否加密了两个密码。 此外,您的查询中包含userpass和user_pass。这是两个“不同”的列。

答案 2 :(得分:0)

您在这里有正确的想法,但我建议使用mysql_query()未经过滤的输入(出于安全考虑)。我宁愿看到你使用准备好的陈述。

但是,从您的上述查询中,您似乎有两个不同的列user_passuserpass。这可能是你现在困境的根源。