我应该同时向MySQL发送多个任务吗?如果是,如何


Should I be sending multiple tasks to MySQL at the same time? If so, how?

如果我有一个执行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中用;连接查询有点熟悉,所以我猜这是关键,但我不知道如何将其与准备好的语句结合起来。

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

UPDATE users SET token=sha1(token)

单独执行每一个是正常的吗?

是的
对于像有问题的一次性任务,可以使用多个查询。你必须避免的是定期运行大型循环,因为无论你是否可以冲突你的语句,这都无关紧要——数据库都必须以任何一种方式运行它们。

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