每个PDO行的PHP随机字符串

use*_*207 0 php

我想为字段密码的行中的每一行创建一个随机字符串-基本上是一个批量密码生成器。

不幸的是,当我按下批量重置按钮时,密码被重置为所有相同的字符串。我希望每一行都有一个不同的随机字符串。

这是我的代码:

echo '<form method="post" action=""><input type="submit" name="bulk_password_reset" value="Bulk Password Reset" /></form>';
if (isset($_POST['bulk_password_reset'])) {
    $password = generateRandomString();
    while ($result = $sqlUpdate->fetch()) {
        $sqlUpdate = $dbh->prepare("UPDATE $tableName SET password = :password");
        $sqlUpdate-> execute(array(':password'=>$password));
        $sqlUpdate->execute();
        header('Location: su_password_reset.php');
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的随机字符串生成器函数:

//Generate random password
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
Run Code Online (Sandbox Code Playgroud)

请问我做错了什么?

Yar*_*min 5

您应该将内容放置$password = generateRandomString();在while循环中,并添加WHERE条件(假设您id在表中有),以将每个条件UPDATE仅应用于一行。

$sqlSelect = $dbh->query("SELECT id FROM $tableName"); // select ids where you want to change passwords
while ($result = $sqlSelect->fetch()) {
    $password = generateRandomString();
    $sqlUpdate = $dbh->prepare("UPDATE $tableName SET password = :password WHERE id = :id");
    $sqlUpdate->execute(array(':password'=>$password, ':id'=>$result['id']));
    header('Location: su_password_reset.php');
}
Run Code Online (Sandbox Code Playgroud)

UPD我不太确定语法,但这给了您一个想法,您需要做什么(为每行选择ID,生成密码,然后仅为该行更新密码)。