CI 묻고 답하기

제목 CI에서 PDO 사용법
글쓴이 정수리 작성시각 2016/05/17 10:47:20
댓글 : 17 추천 : 0 스크랩 : 1 조회수 : 21094   RSS

CI에서 PDO를 사용할려고 하는데

 

database.php에서 pdo 설정 후 

 

db연결까지 성공하였는데

 

query 날리것에서 잘안되네요;

 

$this->pdo->query('select * from XXX)->result();

오류가 발생하네요;

pdo방식으로 

$select->pdo->query('select & from xxx');

$select->execute();

$select->setFetchMode(PDO::FETCH_ASSOC);

$select->fetch();

이렇게해도 오류가 발생하네요

 

구글 통해 찾아보니 pdo방식으로 해도된다

연결은 pdo로 하고 사용방법은 ci 방식으로해야한다

 

 

여러가지인데 정확히 어떤것을 어떻게 사용해야되죠?

 다음글 ajax 버그라고 생각하는데 어떻게들 생각하시나요? (3)
 이전글 컨트롤러나, 모델 클래스가 쓰레드에 안전한가요? (2)

댓글

한대승(불의회상) / 2016/05/17 12:08:08 / 추천 0

사용 방법이 잘 못 되었습니다.

아래 처럼 해보세요.

var_dump($this->db->query('select * from XXX)->result());

get() 은 쿼리빌더 사용시 사용하는거라 query() 사용시 함께 사용 하시면 안됩니다.

kaido / 2016/05/17 12:14:40 / 추천 0

@불회

이런 실수를 ㅎㅎ 잘못된 정보는 얼른 삭제.

정수리 / 2016/05/17 13:25:10 / 추천 0

@불의회상

죄송하지만;; get()이 어디에 있죠??;

제가 작성한 것에 get()에 관련된 문구가 없어서;

한대승(불의회상) / 2016/05/17 13:34:23 / 추천 0
정수리님이 작성하신 코드에는 없습니다. ^^
정수리 / 2016/05/17 13:42:53 / 추천 0

@불의 회상

말씀하신 방법의 경우는 pdo를 사용하지 않는 방식 아닌가요?

찾아보니 이렇게 사용하라고 하는데;

밑에 껄로해도 안되네요;;

 

$stmt = $this->pdo->query("SELECT * FROM users");  
var_dump($stmt->result());
한대승(불의회상) / 2016/05/17 13:53:11 / 추천 0

@정수리 pdo 설정을 어떻게 하셨나요?

그리고 제가 제시한 방법은 $this->pdo 가 아니라 $this->db 입니다.

정수리 / 2016/05/17 14:03:26 / 추천 0

@불의회상 

아 db방법을 추천하신 거군요.

pdo 설정의 경우

database 설정에서

$db['default'] 밑에 

$db['pdo']하여 설정하였습니다; 연결은 되는데 쿼리에서 안되니 ㅜ.ㅜ

$db['pdo']=array(
    'dsn'=>'mysql:host=localhost; dbname=xxxxxx',
    'username'=>'root',
    'password'=>'xxxxxxx',
    'database'=>'xxxxxx',
    'dbdriver'=>'pdo',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

한대승(불의회상) / 2016/05/17 14:22:34 / 추천 0

@정수리 PDO 설정은 제대로 하셨습니다.

$this->db가 아닌 $this->pdo 를 이용하여 별도로 접근 하고 싶다면 아래처럼 load 하여 주셔야 합니다.

$this->pdo = $this->load->database('pdo', TRUE);

http://www.ciboard.co.kr/user_guide/kr/database/connecting.html

정수리 / 2016/05/17 14:24:18 / 추천 0

@불의회상 

접근할려고 할때 말씀하신대로 'pdo', true 하고 접근 하였을시 

정상적으로 접근이 되는걸 확인했지만

query 사용이 되지 않아서 ㅜ,ㅜ  query를 날릴때 다른방법으로 날려야 하나요?

kaido / 2016/05/17 14:35:34 / 추천 0

일단 정수리님은 CI 구조에 대해서 오해가 있으신것 같습니다.

 

 'dbdriver'=>'';

 어떤 드라이버를 사용하겠냐는 의미입니다.

pdo mysql mysqli  mssql 기타등등

 

드라이버를 선택 하면 접속 설정과 안쪽에 쿼리 선언등등은 전부 CI 방식으로 실행 됩니다.

[왜냐면 드라이버 안쪽에서 변환시켜서 실행 하거든요.]

 

즉 pdo를 하든 mssql 를 하든 $this->db->query(); 로 실행 합니다.

 

좀 더 자세한 사항은 system/database/ 밑에 있는 파일들을 확인해 보시면 CI의 데이터베이스 구조를 이해 하실 것입니다.

kaido / 2016/05/17 14:39:55 / 추천 0

만일 쿼리 자체가 실행이 안되고 있다면 CI 문제가 아닙니다. 

RDB 자체의 권한 부분을 체크 해보셔야 합니다.

오류가 난다면 분명 오류 코드를 나타낼테니, 오류코드를 보여주셔야 정확한 진단이 가능합니다.

정수리 / 2016/05/17 14:51:23 / 추천 0

아 죄송합니다 미리 오류 코드를 보여 드렸어야 했는데 죄송합니다

$this->load->database('pdo', ture); 

$this->pdo->query('select * from topic')->result();

이렇게 사용하였을 경우

Fatal error: Call to a member function query() on null 

이라는 오류가 발생하네요; 

한대승(불의회상) / 2016/05/17 15:14:51 / 추천 0

@정수리 작성된 코드에 오류가 있습니다.

샘플로 제시한 코드와 뭐가 다른지 잘 살펴 보세요.

정수리 / 2016/05/17 15:43:30 / 추천 0

@불의회상

어느 부분이 오류가 있다는 말씀이시죠?

http://codebyjeff.com/blog/2013/03/codeigniter-with-pdo

이곳을 참고하여 작성하였습니다;;

kaido / 2016/05/17 15:55:58 / 추천 0

링크로 걸어 놓으신 예제 대로 하시면 정상으로 나올거라 판단 됩니다.

설정 값 빼고 문자 하나 빠트리지 않고 동일 하게 하시면 정상적으로 확인 가능 하실겁니다.

즉 현재 예제 하고 틀리게 작성 했다는 소리가 됩니다.

친절하게 2.x 버전과 3.x 사용 버전 까지 잘 정리해 놓았네요.