programing

CodeIgniter의 액티브레코드가 있는 데이터베이스에 NOW() 삽입

copysource 2022. 9. 22. 23:57
반응형

CodeIgniter의 액티브레코드가 있는 데이터베이스에 NOW() 삽입

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
            );

나는 보통 타임스탬프를 처리하기 위해 트리거를 사용하지만, 이것이 효과가 있을 것이라고 생각한다.

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

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

내가 크게 틀리지 않는 한 대답은 "아니, 방법이 없어."이다.

이러한 상황에서 기본적인 문제는 MySQL 함수를 호출하고 실제 값을 설정하지 않는다는 것입니다.CI는 값을 이스케이프하여 깔끔하게 삽입할 수 있지만 이러한 값이 다음과 같은 함수를 호출하는지 여부를 테스트하지 않습니다.aes_encrypt,md5또는 (이 경우)now()대부분의 경우 이 방법은 훌륭하지만 이러한 상황에서는 raw sql이 유일한 수단입니다.

한쪽에선date('Y-m-d');의 PHP 버전으로 동작해야 합니다.NOW()(일부 버전의 SQL에서는 동작하지 않습니다).

아스피린 메마가, 그냥 대체해:

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

그 이유:

$this->db->set('time', 'NOW() + INTERVAL 1 DAY', FALSE);
$this->db->insert('mytable', $data);

이렇게 하면 타임스탬프 삽입을 쉽게 처리할 수 있습니다.

$data = array('created_on' => date('Y-m-d H:i:s'));

사용자의 GMT 타임오프셋을 참조하려면 날짜 도우미를 로드하고 코드 시그니터 interal now()를 사용할 수 있습니다.

그것은 약간 이렇게 생겼다

$data = array(
'created_on' => date('Y-m-d H:i:s',now())
);

GTM 마스터 설정을 사용하지 않고 사용자가 자신의 오프셋을 설정할 수 있도록 하면 php의 time() 함수를 사용하는 것보다 이점이 없습니다.

    $data = array(
            'name' => $name ,
            'email' => $email,
            'time' =>date('Y-m-d H:i:s')
            );
            $this->db->insert('mytable', $data);

코드 시그너의 소스코드에 따라 함수는set는 다음과 같이 정의됩니다.

public function set($key, $value = '', $escape = TRUE)
{
    $key = $this->_object_to_array($key);

    if ( ! is_array($key))
    {
        $key = array($key => $value);
    }

    foreach ($key as $k => $v)
    {
        if ($escape === FALSE)
        {
            $this->ar_set[$this->_protect_identifiers($k)] = $v;
        }
        else
        {
            $this->ar_set[$this->_protect_identifiers($k, FALSE, TRUE)] = $this->escape($v);
        }
    }

    return $this;
}

듣자하니 만약$key배열입니다. 코드 시그너는 두 번째 파라미터를 무시합니다.$value단, 세 번째 파라미터$escape반복하는 동안에도 계속 기능할 것이다$key따라서 이 상황에서는 다음 코드가 동작합니다(체인 방식 사용).

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

단, 모든 데이터가 이스케이프 해제되므로 데이터를 다음 두 부분으로 나눌 수 있습니다.

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

NOW()를 따옴표로 묶는 것은 동작하지 않습니다.Active Records가 NOW()의 이스케이프를 문자열에 넣고 NOW()의 문자열로 DB에 푸시하려고 하기 때문입니다.사용할 필요가 있습니다.

$this->db->set('time', 'NOW()', FALSE); 

올바르게 설정해 주세요.

나중에 언제든지 sql을 확인할 수 있습니다.

$this->db->last_query();

날짜 도우미가 나를 위해 일한 날짜 사용

$this->load->helper('date');

자료에는 '하다'라는 문서가 .date_helper 여기 있습니다.

$data = array(
  'created' => now(),
  'modified' => now()
);

$this->db->insert('TABLENAME', $data);

$this->db->query("update table_name set ts = now() where 1=1")!!타!!!!!!!!!!!!

쿼리를 실행하여 mysql에서 now()를 가져옵니다.즉, nowinmysql로 now()를 선택합니다.

그리고 코드 시그너를 사용하여 이것을 입수하여 입력한다.

$data['created_on'] = $row->noinmyssql;
$this->db->insert($data);

언급URL : https://stackoverflow.com/questions/6354315/inserting-now-into-database-with-codeigniters-active-record

반응형