私はCodeIgniterを使用していませんが、純粋なPHPベースのサイトで行っていることは確かに行っています。
私は、さまざまなプロジェクトで2つの考え方に従いました。
戦略#1:複数の書き込みは安価です。
ユーザーが「キャンセル」ではなく「送信」をクリックした場合、少なくとも1つのフィールドが変更されています。したがって、を実行するコストはUPDATE table SET name=%s,email=%s,gender=%s WHERE id=%d
単純なものにすぎませんUPDATE table SET gender=%s WHERE id=%d
。WHEREと書き込みの費用がかかる場合、書き込みをいくつかの追加フィールドにすることは、特にそれが発生する頻度では重要ではありません。
だから:それについて心配する必要はありません。フォームに戻ってきたものですべてを更新するだけです。同じデータでフィールドを上書きする場合、それは問題ではありません。結局のところ、以前のデータベースに何があったかに関係なく、フォームに戻ってきたすべてのものをデータベースに反映させる必要があります。
戦略#2:セッション変数を使用します。
フォームに現在のデータを入力している場合は、すでにそれを配列にプルしている可能性があります。したがって、配列をにコピーし$_SESSION
、POST後のフィールドを比較します。
戦略1はプログラミングが簡単ですが、データベースのCPUと帯域幅をわずかに多く使用します。戦略2は、Webサーバーで使用されるCPUがかなり多くなるという犠牲を払って、データベースへの影響がわずかに少なく、開発エラーが発生しやすくなります。
どちらが良いかはまだわかりませんが、どちらの議論も正しいようです。最近、私は最も単純な解決策を選ぶ傾向があります。ただし、データベースクラスターよりもWebクラスターのスケーリングが簡単であることに気付いたため、非常に大規模なものを開発する場合は、Webサーバーではなくデータベースを優先して最適化に注力する方がよいでしょう。
セッションデータを一時ファイルではなくデータベースに保存している場合、#2は、データベースサーバーへの影響という点で実際にはコストがかかることに注意してください。