Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未根据my WHERE子句更新非md5密码的新列_Php_Mysqli - Fatal编程技术网

Php 未根据my WHERE子句更新非md5密码的新列

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');

你好

我在数据库中添加了一列,希望在其中使用现有密码,对其进行散列,并使用新散列的密码更新passwordNonMd5列。我已经加入了echos来测试每个密码是否都接收到了分配的哈希值。但是我的数据库在所有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 );

}

哇,你不能像那样更新密码,如果两个人碰巧有相同的散列呢?不要连接SQL字符串。使用参数。它将修复丢失的引号,这将给出一个错误,使事情更加安全。密码处理似乎不是很安全,其中password=$password。。。这段代码运行吗?您正在将密码列与一些非字符串文字进行比较,这些文字可能会被解释为列名。这很有意义,谢谢