3

MySQL を単独で使用する - 次のようなテーブルに基本的な更新を行う場合:

UPDATE `SOMETABLE` SET `NAME` = 'John' WHERE `ID` = 1;

そしてNAME= ' John ' の値はすでに ' John ' でした - 言い換えれば - 何も新しくも更新するものもありません。MySQL は「影響を受ける行: 0 (クエリに 0.0007 秒かかりました)」を返します。

CodeIgniter を使用して同じ呼び出しを行い、影響を受ける行を次のように取得すると、次のようになります。

$data = array(
               'NAME' => 'John'
            );

$this->db->where('ID', 1);
$this->db->update('SOMETABLE', $data); 
$affect = $this->db->affected_rows();

echo $affect; // $affect echos 1

$affectは最終的に 1 になります。私はこれに問題はありません。更新するものが何もない場合、codeigniter は MySQL と同じように動作し、更新する必要のないものは編集しないと予想していました。 related_rows() の場合は 0 を返します。

  • 私はこれを何らかの方法で間違っていますか?
  • codeigniter は ' John ' を上書きしていますか? か否か?
4

1 に答える 1

2

次のコードを使用して、CodeIgniter が実行しているクエリを取得してみてください。

$this->db->last_query();

また、まったく同じクエリが実行されていることを確認するために、MySQL とやり取りするために使用しているクエリも投稿してください。

CodeIgniter には、影響を受ける行のレポートを調整する MySQL 用のハックがありますが、DELETE クエリ専用であるという印象を受けました。system/database/drivers/mysql/mysql_driver.phpまたはsystem/database/drivers/mysqli/mysqli_driver.php(使用しているドライバーに関係なく、変数を確認します。var $delete_hack = TRUE;結果に影響を与える可能性のある調整を行うと、試してみる価値がありますか?

于 2013-02-06T03:26:31.570 に答える