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
'programing' 카테고리의 다른 글
SQL 열 추가 (0) | 2022.09.25 |
---|---|
글로벌 플래그가 있는 RegExp에서 잘못된 결과가 나타나는 이유는 무엇입니까? (0) | 2022.09.25 |
phpmyadmin에서 타임아웃을 해결하려면 어떻게 해야 하나요? (0) | 2022.09.22 |
'테이블 잠금 [table_name] 쓰기'를 했을 때 '메타달록'이 발생하였습니다. (0) | 2022.09.22 |
& vs @ 및 =의 각도 차이는 무엇입니까?JS (0) | 2022.09.22 |