【问题标题】:Query was empty with MySQL select QueryMySQL select Query 查询为空
【发布时间】:2016-01-24 16:09:44
【问题描述】:

所以我是 php 和 mysql 的新手,在过去的几天里,我使用 php 和 mysql 创建了一个登录系统。我正在尝试创建一个功能,用户可以使用以下查询更改密码:

$query2 =  mysql_query("SELECT password FROM adminusr WHERE id =$idToChange");
$result = mysql_query($query2) or die($idToChange.mysql_error());

【问题讨论】:

  • (1) 您不会使用 SELECT 查询更改任何内容。 (2) 相当使用“mysql_”。它不再受支持。
  • 第 1 行中的 $query2 是您要遍历的结果集。第2行没有意义。一个人应该散列他们的密码,并用密码验证他们。正如 Gordon 所说,不推荐使用 mysql* 函数。使用mysqli或者pdo,上面很多都可以Seen in this Link
  • 这段代码应该是抓取数据库中的密码。选择查询应该从用户 ID 中从数据库中获取密码。在稍后的另一个查询中,我更改了密码。
  • 不要获取密码(将其保存为明文)。散列并验证它。散列是一种单向函数。最佳实践是让您验证哈希,而不是用人工确认 cleartext=cleartext。现在我敢打赌,因为你开始认为这不是你要做的,但这是你应该做的
  • 这是deprecated function 的手册页。另外不要使用 md5

标签: php mysql


【解决方案1】:

使用 SELECT 语句,您只能选择行。要更改它们,您需要更新。考虑使用 PDO,因为不推荐使用 mysql_* 函数。还要尝试对您的密码进行哈希处理,不要以纯文本形式存储它们。

你需要这样的东西:

$query2 =  mysql_query("UPDATE adminusr SET password = '$new_password' WHERE id = '$idToChange'");

使用 PDO

//Make the connection using PDO

try {
    $conn = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
    echo "PDO connection object created";
}
catch(PDOException $e) {
    echo $e->getMessage();
}
//Make your query
$sql = 'UPDATE adminusr SET password = :new_password WHERE id = :id';
$stmt = $conn->prepare($sql);
$stmt->execute(array(':new_password'=>$new_password, ':id'=>$idToChange));

编辑回复评论

然后,您还需要在表单中包含用户名和密码字段。因此,您需要四个字段:usernameoldPasswordnewPasswordconfirmNewPassword。在更新语句之前,您需要选择具有凭据usernameoldPassword 的用户。如果只找到一个,则必须检查 newPasswordconfirmNewPassword 是否匹配。如果匹配则继续更新。否则打印一些错误信息。

【讨论】:

  • 为了安全起见,在更新密码之前,它会检查输入的旧密码是否与数据库中的密码匹配。这就是表单的样子prntscr.com/8v5cra
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多