php - 根据我的 WHERE 子句,非 md5 密码的新列未更新
问题描述
再会
我在我的数据库中添加了一个列,我想在其中使用现有密码,对其进行散列并使用新散列的密码更新 passwordNonMd5 列。我已经包含了 echo 来测试每个密码是否都接收到它们分配的哈希值。但是我的数据库在所有 passwordNonMd5 行中只更新了一个哈希密码。
有人可以指出我的错误吗?
谢谢你
include_once 'dbh.php';
ini_set('max_execution_time', 300);
ini_set('memory_limit','1000M');
$query = "SELECT password FROM users";
if ($result = mysqli_query($conn, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
$password = $row["password"];
echo "$password ";
$newHash = password_hash($password, PASSWORD_DEFAULT);
echo "New Hash is: " . $newHash . "\n";
$insert = "UPDATE users SET passwordNonMd5 = '$newHash'
WHERE password = $password";
$query_run = mysqli_query($conn, $insert);
}
}
解决方案
像这样的东西应该工作:
$sql = 'SELECT * FROM users';
$res = mysqli_query( $conn, $sql );
while( $row = mysqli_fetch_assoc($res) ) {
// You could salt the password here to make hashes more likely to be unique
// example: $newPass = password_hash( $row['id'] . $row['password'] . $row['perUserOrSystemDefinedSecret'], PASSWORD_DEFAULT );
$newPass = password_hash( $row['password'], PASSWORD_DEFAULT );
// We can sql inject ourself here but as the data is hashed or is probably a integer we should be fine.
$updateSql = 'UPDATE users SET passwordNonMd5 = "' . $newPass . '" WHERE id = ' . $row['id'];
mysqli_query( $conn, $updateSql );
}
推荐阅读
- java - 尝试使用 if 语句在 Java for 循环中创建 10 列
- java - 安装为 apk 时,retrofit2 连接会引发错误
- python - 在远程桌面中使用 pywinrm 启动分离的进程
- postgresql - Postgres 与 ORDER BY 和 Equals 与 IN 的碰撞行为
- php - 在 websocket 中向终端创建的 codeanywhere.com 网站服务器发送 bash 命令
- html - 如何将网络上的图像添加到我的 html 网站?
- r - 在排列的 r 数据框中映射相应的值
- java - 无法正确定义处理程序方法以关闭主程序框架和弹出对话框
- c# - 使用 LINQ 查询 JSON
- android - 您的应用程序是否有任何测试应用程序 ID?