$this->db->affected_rows()
を使用して、更新が成功したかどうかを確認しています。ただし、これは、ユーザーが既に保存されている同じデータを入力すると機能しません(実際に更新される列がないため)。私の回避策は、保存されたデータを取得し、入力されたデータと比較し、異なる場合は更新し、同じ場合はNO_CHANGE定数を返すことです。 JSONデータでは、追加の解析ステップがあります。
更新にエラーがなかったことを確認する簡単な方法はありますか?たとえば、保存されたデータを事前に取得する必要がないものは何ですか?
正しく理解できれば、トランザクションを使用して、更新でエラーが発生しなかったことを確認できます。
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->update('table',$array);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
// generate an error... or use the log_message() function to log your error
}
これは、トランザクション内のすべてのクエリでSQLエラーがなかったことを検証するだけです。
詳細情報へのリンクはこちら Code Igniter Active Record Transaction
Mirov codeigniterを使用している場合、データは入力フィールドの値に何らかの変更がある場合にのみ更新され、$this->db->affected_rows()
は0より大きい値を返します。
2つのフィールドname
とemail
があるとします。フィールドを変更せずにフォームを送信しようとすると、$this->db->affected_rows()
は0を返し、そうでない場合は1を返します。
より良いアプローチは使用することです
if($this->db->affected_rows() >=0){
return true; //add your code here
}else{
return false; //add your your code here
}
私の「回避策」は非常に簡単です-always updatedフィールドを含めることです。たとえば、フィールドがあり、日付と時刻の値を秒で更新する場合、他の更新値が同じであっても、日付と時刻の秒は常に異なります。
ボーナスは、最後の更新が行われた日付のdbレコードに日付があることです。
なぜこれだけを使用できないのかわかりません:
if ($this->db->update('table',$array) === FALSE){
// generate an error... or use the log_message() function to log your error
}