Обновление столбца базы данных SQL обновляет все строки с одинаковыми данными - PullRequest
0 голосов
/ 17 мая 2019

В настоящее время я использую следующий PHP для выбора паролей в виде простого текста из моей базы данных, используйте bcrypt для их хеширования, а затем обновите их в таблице:

PHP:

    $select = "SELECT Password
FROM Login";
$result = $conn->query($select);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Password: " . $row["Password"]. "<br>";
        $hashed_password = password_hash($row["Password"], PASSWORD_DEFAULT);
        $sql = "UPDATE login SET Password='$hashed_password' ";
        mysqli_query($conn,$sql);
        echo " Succesfully Updated. <br>";
    }
} else {
    echo "0 results";
}

Однако он обновляется с тем же хешем (паролем) для каждого значения:

--- LOGIN ---
Идентификатор входа: 1 Пароль-хэш: z39kjddddddddddd
Идентификатор входа: 2 Пароль-хэш: z39kjddddddddddd
Идентификатор входа: 3 Пароль-хэш: z39kjddddddddddd

Как мне это исправить? Спасибо

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Вы используете скрипт $sql = "UPDATE login SET Password='$hashed_password' ";, в котором отсутствует предложение WHERE, безусловно, все данные в вашей таблице будут иметь только один тип хешированного пароля

Я предлагаю

$sql = "UPDATE login SET Password='$hashed_password' WHERE id =".$row["id"];
0 голосов
/ 17 мая 2019

для обновления нам нужно использовать предложение where.в вашем коде нет выражения where.

$sql = "UPDATE login SET Password='$hashed_password' ";

должно быть похоже на

 sql = "UPDATE login SET Password='$hashed_password' WHERE id =".$row["id"];
0 голосов
/ 17 мая 2019

В вашем запросе вы получаете все пароли, но не получаете первичный ключ для каждой строки. Как тогда вы узнаете, какую строку обновлять? Вы также должны получить первичный ключ для таблицы и использовать его для обновления строки.

Предполагая, что в вашей таблице есть строка с именем 'id', которая является первичным ключом.

$select = "SELECT id, Password FROM Login";
$result = $conn->query($select);
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $id = $row['id'];
        echo "Password: " . $row["Password"]. "<br>";
        $hashed_password = password_hash($row["Password"], PASSWORD_DEFAULT);
        $sql = "UPDATE `login` SET Password='$hashed_password' WHERE `id` = {$id}";
        mysqli_query($conn, $sql);
        echo " Successfully Updated. <br>";
    }
} else {
    echo "0 results";
}

Возможно, вы захотите найти способ узнать, обновлен ли пароль, и обновить только те строки, которые не были обновлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...