Php 未根据my WHERE子句更新非md5密码的新列
你好 我在数据库中添加了一列,希望在其中使用现有密码,对其进行散列,并使用新散列的密码更新passwordNonMd5列。我已经加入了echos来测试每个密码是否都接收到了分配的哈希值。但是我的数据库在所有passwordNonMd5行中只更新了一个哈希密码 有人能指出我的错误吗 多谢各位Php 未根据my WHERE子句更新非md5密码的新列,php,mysqli,Php,Mysqli,你好 我在数据库中添加了一列,希望在其中使用现有密码,对其进行散列,并使用新散列的密码更新passwordNonMd5列。我已经加入了echos来测试每个密码是否都接收到了分配的哈希值。但是我的数据库在所有passwordNonMd5行中只更新了一个哈希密码 有人能指出我的错误吗 多谢各位 include_once 'dbh.php'; ini_set('max_execution_time', 300); ini_set('memory_limit','1000M');
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 );
}
哇,你不能像那样更新密码,如果两个人碰巧有相同的散列呢?不要连接SQL字符串。使用参数。它将修复丢失的引号,这将给出一个错误,使事情更加安全。密码处理似乎不是很安全,其中password=$password。。。这段代码运行吗?您正在将密码列与一些非字符串文字进行比较,这些文字可能会被解释为列名。这很有意义,谢谢