我有一个使用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方法更快吗?出于安全/安全原因,是否应该使用交易方法,尽管速度较慢?
答案 0 :(得分:1)
实际上,事务(在MySQL中,需要使用" InnoDB"表...)非常有效。数据库引擎将(可能......)锁定查询所涵盖的所有存储页面,并可能延迟实际将页面写回到存储,直到事务COMMIT
为止第
我的建议很简单:(a)在他们似乎被要求时不要害怕交易,(b),&#34 ;只关注简洁性和清晰度。"编写明显,易于阅读且易于维护的代码。然后,假设SQL引擎知道如何执行其作业。 : - )