我没有使用过 CodeIgniter,但我肯定已经完成了您在纯 PHP 网站中所做的事情。
在不同的项目中,我遵循了两种思维方式。
策略#1:多次写入很便宜。
如果用户单击“提交”而不是“取消”,则他们至少更改了一个字段。所以做一个的成本UPDATE table SET name=%s,email=%s,gender=%s WHERE id=%d
并不比一个简单的多得多UPDATE table SET gender=%s WHERE id=%d
。如果您要花费 WHERE 和 write 的费用,那么让 write 增加几个额外的字段并不重要,尤其是在它发生的频率上。
所以:不用担心,只需使用您在表单中获得的内容更新所有内容。如果你用相同的数据覆盖一个字段,那没关系。归根结底,您希望您的数据库反映表单中返回的所有内容,而不管之前数据库中的内容。
策略#2:使用会话变量。
如果您已经使用当前数据填充了表单,那么您可能已经将其拉入了一个数组。因此将数组复制到$_SESSION
中,并比较 POST 之后的字段。
策略 1 更易于编程,但使用的数据库 CPU 和带宽稍多。策略 2 对数据库的影响略小,但代价是您的 Web 服务器上使用了更多的 CPU,并且更容易出现开发错误。
我仍然不知道哪种方式更好,但两者的论点似乎都是有效的。这些天来,我倾向于选择最简单的解决方案。但是我意识到扩展 Web 集群比扩展数据库集群更容易,所以如果你正在开发非常大的东西,最好花更多的精力来优化你的数据库而不是你的 Web 服务器。
请注意,如果您将会话数据存储在数据库中而不是临时文件中,那么就数据库服务器影响而言,#2 实际上成本更高。