1

如果我有一个执行 PDO 语句的循环,有没有办法整理这些执行并在循环之后一次性运行它们,或者单独执行每个执行是否正常?

例如,我正在更新数据库中每一行的字段,如下所示:

$pdo = new PDO(/* valid connnection arguments */);

$stmt = $pdo->prepare("SELECT id, username, password FROM users ORDER BY id ASC");
$stmt->execute();

foreach($stmt->fetchAll(PDO::FETCH_CLASS) as $user)
{
    $token = sha1($salt . $user->username . $user->password);

    $stmt = $pdo->prepare("UPDATE users SET token = :token WHERE id = :id LIMIT 1");
    $stmt->execute(array(
        ":id" => $user->id,
        ":token" => $token
    ));
}

但我非常有信心这应该以不同的方式完成,作为对 MySQL 的一个查询。我对 phpMyAdmin 中的连接查询有点熟悉;,所以我猜这是关键,但我不确定如何结合准备好的语句来做到这一点。

4

2 回答 2

1

您可以让数据库处理更新:http ://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_sha1

UPDATE users SET token=sha1(token)
于 2013-08-29T02:29:05.173 回答
0

每个单独执行是否正常?

是的。
对于像这样的一次性任务,多次查询就可以了。您必须避免的是定期运行大型循环,因为这并不重要,如果您可以碰撞您的语句 - 数据库必须以任何方式运行它们。

所以,现在你可以运行你的大规模更新循环并转向更紧急的事情了。

于 2013-08-29T04:41:22.753 回答