CI 묻고 답하기

제목 혼자서 해결해보려고 했지만 도저히 안되서 여쭤보겠습니다.
글쓴이 일용직노동자 작성시각 2014/09/23 05:29:00
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 17022   RSS
예전에 CI + ODBC(mssql)을 사용하다가
create_user (tank_auth users modle method)에 date['created'] = date('y-m-d h:i:s');
라는 구문이 있는데 mssql과 날짜형식이 안맞는다는 에러가 발생했습니다.

그래서 웅파님이 답변을 달아주셔서 그 형식대로 넣어봤습니다.

function create_user($data, $activated = TRUE)
    {

          $data['created'] = array();
            $date = array();

        $this->db->select('GETDATE() AS CURRENTDATE');
        $query = $this->db->get();
        
            foreach ($query->result_array() as $row){
                $date['dodo'] = Array (
                    "created" => $row['CURRENTDATE']
                );
                var_dump($date['dodo']);
                array_push($data['created'], $date['dodo']);
                var_dump($data['created']);
            } 
        //$data['created'] = date('Y-m-d H:i:s');
        //$query = $this->db->select('FROM ALERT WHERE (CONVERT('$data['created']', 126)', FALSE);
        //$data['created'] = $query;
        // $data['created'] = array();
        // $date = array();

        // $this->db->select('GETDATE() AS CURRENTDATE');
        // $query = $this->db->get();
        
        //     foreach ($query->result_array() as $row){
        //         $date['dodo'] = Array (
        //             "created" => $row['CURRENTDATE']
        //         );
        //         var_dump($date['dodo']);
        //         array_push($data['created'], $date['dodo']);
        //         var_dump($data['created']);
        //     }
        //$date = implode(" ",$getdate);
        //$data['created'] = $this->db->select('(SELECT CONVERT(varchar(30), GETDATE(), 121) FROM '.$table_name.''), FALSE);
        //$getdate = $this->db->query('SELECT GETDATE()');
        //$data['created'] = $this->db->query('Select Replace(Convert(varchar(30),Getdate(),121),'-','/''))->result();
        // foreach ($getdate->result_array() as $row) {
        //     $date['date'] = array(
        //         "created" => $row['created']
        //         );
        //     array_push($data['created'], $date);
        // }
        $data['activated'] = $activated ? 1 : 0;

        if ($this->db->insert($this->table_name, $data)) { 
            $user_id = $this->db->insert_id();
            if ($activated)    $this->create_profile($user_id);
            return array('user_id' => $user_id);
        }
        return NULL;
    }

이 방법 저 방법하다가 결국엔 

  $data['created'] = array();
            $date = array();

        $this->db->select('GETDATE() AS CURRENTDATE');
        $query = $this->db->get();
        
            foreach ($query->result_array() as $row){
                $date['dodo'] = Array (
                    "created" => $row['CURRENTDATE']
                );
                var_dump($date['dodo']);
                array_push($data['created'], $date['dodo']);
                var_dump($data['created']);
            } 

이 방법을 택했습니다.
SELECT GETDATE() AS CURENTDATE로 하여 CURRENTDATE항목으로 현재시간을 가져옵니다.
그 후에  row를 뽑아서 $date['dodo'] 배열에 created로 row 뽑아온 값을 집어넣었습니다.
그 후 array_push로 date['created']에 row값을 넣은 dodo를 푸쉬하였습니다.

그러면 될 줄알았는데

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: odbc/odbc_driver.php

Line Number: 514

란 에러와
 

Error Number: S0022

[Microsoft][SQL Server Native Client 11.0][SQL Server]열 이름 'Array'이(가) 잘못되었습니다.

INSERT INTO users (username, password, email, last_ip, new_email_key, created, activated) VALUES ('test', '$2a$08$ELBD.I8dX3V1saZl.QrZHuG90dwVaWnHLLhoWCjcWzqdXzNg1dUGC', 'test', '125.7.174.76', 'bd35287e8631f80c2f1182806a46730f', Array, 0)

Filename: C:\xampp\htdocs\mmac\system\database\DB_driver.php

Line Number: 330

이런 에러를 뿜내요.. ㅠㅠ 
array가 문자열로 변환이 안되서 그런것같은데 으.. 
implode를 사용해도 해결이 안되네요

vardump를 찍어봤을때

array(1) { ["created"]=> string(23) "2014-09-23 05:29:45.247" } //var_dump($date['dodo']);
array(1) { [0]=> array(1) { ["created"]=> string(23) "2014-09-23 05:29:45.247" } } //배열 푸쉬후   var_dump($data['created']); 입니다.

어떻게 고쳐야 될까요?
조언 부탁드립니다.

 다음글 파일 업로드 관련 질문입니다. (2)
 이전글 form_validation 에 관해 질문 드립니다! (5)

댓글

한대승(불의회상) / 2014/09/23 09:28:44 / 추천 0
이렇게 해보세요.
 
$now =  $this->db->select('GETDATE() AS now', FALSE)->get()->row()->now;
var_dump($now);
일용직노동자 / 2014/09/23 13:28:23 / 추천 0
답변 감사드립니다.

이상하게도 분명 mssql 형식으로 들어가진 것 같습니다.
var_dump로 찍어보니 2014-09-23 13:37:08.003로 형식에 맞게 잘나오구요.
그런데도 

[Microsoft][SQL Server Native Client 11.0][SQL Server]문자열을 날짜 및/또는 시간으로 변환하지 못했습니다. 에러가 뜨네요
으.. 미치겠습니다 ㅠㅠ 
일용직노동자 / 2014/09/23 13:50:50 / 추천 0
string을 datetime형식으로 안바꿔줘서 이런 에러가 뜬거였네요 @_@ 으.. 너무어렵네요
일용직노동자 / 2014/09/23 13:53:50 / 추천 0
$now =  $this->db->select('CONVERT(CHAR(19), GETDATE(), 120) AS now', FALSE)->get()->row()->now;
$data['created'] = $now;

이런식으로 변형해봤는데 어쨋든 결과론적으로 문자열로 받아오니 직접쿼리를 쓰지않는 이상 방법이 없나요 흠..
한대승(불의회상) / 2014/09/23 14:33:07 / 추천 0
insert 할때나 update 할때 바꿔줘야 하지 않나요??
일용직노동자 / 2014/09/23 14:44:04 / 추천 0
아 그렇네요 다시 한번 해보겠습니다.  답변감사드립니다 ㅎㅎ