MYSQL数据库的可变数量更新

时间:2015-06-09 23:16:24

标签: php mysql pdo

我有一个使用PDO与MYSQL数据库交互的PHP页面。我有一个函数,可以根据请求更新数据库中的多个字段。由于我不知道将提前更新多少字段,因此编写单个查询非常棘手。哪种方法更可取(或者还有其他更好的方法我不知道)?

查询构建

$query = "UPDATE users SET ";
foreach ($changes as $field => $new_value)
{
    $valid_field = validate_field($field);
    $query .= "${valid_field} = :${valid_field} ";
}
$query = "WHERE id = :id ;";
// Prepare statement, bind values, execute, check for errors, etc

据我所知,这不可取。我倾向于同意;这看起来有点难看。

交易

$pdo_object->beginTransaction();
foreach ($changes as $field => $new_value)
{
    $valid_field = validate_field($field);
    $query = "UPDATE users SET ${valid_field} = :${valid_field} WHERE id = :id";
    // Prepare statement, bind values, execute, check for errors, etc
}
$pdo_object->commit();

这对我来说似乎更安全,但是它的编写方式看起来像是在表中搜索具有该ID的行多次,而不是像其他查询一样。

Query Building方法比Transaction方法更快吗?出于安全/安全原因,是否应该使用交易方法,尽管速度较慢?

1 个答案:

答案 0 :(得分:1)

实际上,事务(在MySQL中,需要使用" InnoDB"表...)非常有效。数据库引擎将(可能......)锁定查询所涵盖的所有存储页面,并可能延迟实际将页面写回到存储,直到事务COMMIT为止第

我的建议很简单:(a)在他们似乎被要求时不要害怕交易,(b),&#34 ;只关注简洁性和清晰度。"编写明显,易于阅读且易于维护的代码。然后,假设SQL引擎知道如何执行作业。 : - )