1. ホーム
  2. php

CodeIgniterのActive RecordでデータベースにNOW()を挿入する

2023-07-22 01:52:08

質問

CodeigniterのアクティブレコードにmySQL関数NOW()を使ってデータベースに現在時刻を挿入したいです。以下のクエリは動作しません。

$data = array(
        'name' => $name ,
        'email' => $email,
        'time' => NOW()
        );
        $this->db->insert('mytable', $data);

これはCodeIgniterのActiveRecordクラスが自動的に入力をエスケープしてくれるからです。

以下は、set()を呼び出してperatmeterにFALSEを渡すことで、NOW()をエスケープしないようにし、うまく動作します。

$data = array(
        'name' => $name ,
        'email' => $email,
        );
        $this->db->set('time', 'NOW()', FALSE);
        $this->db->insert('mytable', $data);

しかし、私の質問は、これ以外の方法があるのでしょうか?例えば、データ配列の中のものだけを追加して、何とか利用できないでしょうか? 例えば、次のようなものです。

$data = array(
            'name' => $name ,
            'email' => $email,
            'time' => NOW(), FALSE
            );

どのように解決するのですか?

大きな間違いがない限り、答えは「方法はない」です。

このような状況での基本的な問題は、MySQL 関数を呼び出していて、実際には値を設定していないという事実です。CI は値をエスケープするので、きれいな挿入を行うことができますが、それらの値が、たまたま aes_encrypt , md5 または (この場合) now() . ほとんどの場合、これは素晴らしいことですが、そのような状況では生のSQLが唯一の手段です。

サイドで date('Y-m-d'); のPHP版として動作するはずです。 NOW() を MySQL で使用することができます。(すべてのバージョンのSQLで動作するわけではありませんが)。