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이 유일한 방법입니다.
측면에서 MySQL 용 date('Y-m-d');
PHP 버전으로 작동해야합니다 NOW()
. (하지만 모든 버전의 SQL에서 작동하지는 않습니다).
답변
일반적으로 트리거를 사용하여 타임 스탬프를 처리하지만 이것이 작동 할 수 있다고 생각합니다.
$data = array(
'name' => $name,
'email' => $email
);
$this->db->set('time', 'NOW()', FALSE);
$this->db->insert('mytable', $data);
답변
aspirinemaga, 그냥 교체 :
$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'));
답변
$data = array(
'name' => $name ,
'email' => $email,
'time' =>date('Y-m-d H:i:s')
);
$this->db->insert('mytable', $data);
답변
사용자 GMT 시간 오프셋을 참조하려면 날짜 도우미를로드하고 codeigniter interal now ()를 사용할 수 있습니다.
이것은 다소 이렇게 보일 것입니다
$data = array(
'created_on' => date('Y-m-d H:i:s',now())
);
GTM 마스터 설정을 사용하지 않고 사용자가 자신의 오프셋을 설정하도록 허용하는 경우 PHP의 time () 함수를 사용하는 것보다 이점이 없습니다.
답변
codeigniter의 소스 코드에 따르면 함수 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
배열 인 경우 codeigniter는 단순히 두 번째 매개 변수를 무시 $value
하지만 세 번째 매개 변수 $escape
는의 반복 동안 계속 작동 하므로이 $key
상황에서 다음 코드가 작동합니다 (chain 메서드 사용).
$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');