CI 묻고 답하기

제목 액티브 레코드 질문드립니다.
글쓴이 휴~한숨쟁이 작성시각 2009/11/19 16:58:06
댓글 : 13 추천 : 0 스크랩 : 0 조회수 : 32108   RSS
1.$query = $this->db->query("select * from ec_member where mem_id = '$mem_id'");
   $cnt = $query->num_rows();

2. $this->db->where('mem_id',$mem_id);
    $query = $this-> db->get('ec_member'); 
    $cnt = $query->num_rows();

1번 쿼리시에는 에러가 안나는데 2번 액티브 레코드 쿼리시 에러가 납니다.
원인은 $this->db->where('mem_id',$mem_id);
$mem_id값을 ''로 감싸주지 못해서 나는듯 한데 저부분을 어떤식으로 써야 할지..

답변주시면 감사하겠습니다.

에러코드 :
Fatal error: Call to undefined method Member::_remove_invisible_characters() in D:\JH_Work\PHPProject\iweb\system\database\drivers\oci8\oci8_driver.php on line 378

환경은 1.7.2버전  explorer 7버전입니다.




 다음글 URL 입력시 No input file specifie... (16)
 이전글 anchor에 onclick을 할 경우에 처리방법 질문 (4)

댓글

헛발이 / 2009/11/19 17:33:35 / 추천 0
제생각엔 따옴표 문제가 아니고 소스 중간에 스페이스(공백)이 있어서 그런거 같은데요..
$query = $this-> db->get('ec_member'); 
여기에서 db 앞쪽에 공백이 있어요...
그리고 아마도 _id라면 숫자가 들어오기 때문에 따옴표와는 별루 상관 없을듯 싶구요..
꼭 따옴표를 써야 한다면

$this->db->where('mem_id','\''.$mem_id.'\'');

이렇게 해주면 되지 않을까요?
ci세상 / 2009/11/19 17:52:03 / 추천 0
현재 사용하시는 버젼 1.7.2 버젼이 아닙니다. 1.7.1 버젼에서 나온 버그입니다.

1.7.1의 경우에 378줄을 다음과 같이 수정하시면 해결되실것입니다.

return $CI->input->_remove_invisible_characters($str); 
휴~한숨쟁이 / 2009/11/20 13:04:06 / 추천 0
버전이 1.7.2버전이 아니였나봅니다 그래두 해결은 아직..
1. 7.2 버전으로 교체 후  처음과 같은 액티브 레코드시

SELECT * FROM "ec_member" WHERE "mem_id" = 'afadf'

테이블명과 필드명에 쌍따옴표가 붙어서 나오네요;; 버그인건지...
한참 재미를 붙여서 열심히 이것저것 들여다 보는데
아직 실력이 부족해 내부를 고칠 실력은 없고 답변좀 부탁드립니다..
ci세상 / 2009/11/20 16:15:22 / 추천 0
가급적 일반쿼리 사용을 권장합니다.

http://codeigniter.com/forums/viewthread/71071/#351004
byung82 / 2009/11/21 15:56:52 / 추천 0
 버그가 아닙니다.  " 붙으것들은 더 정확한 명칭을 위해서 사용됩니다.
일반적으로 테이블명 컬럼명이 대소문자 구분할경우 저렇게 사용됩니다.
조금씩 틀리지만 Postgresql일 경우 UserId 이렇게 정의시 "를 사용하지 않으면 userid = UserId 가 같습니다.
그래서 " 들어가는건 버그가 아닙니다.
일반쿼리 사용보다는 VIEW를 만들어서 CI도 View가 AR에 사용할수 있는지 모르겠지만 View + AR이 좋습니다.
그럼
ci세상 / 2009/11/22 12:53:34 / 추천 0

byung82 / 오라클에서 " 가 들어가면 오류로 인식할텐데요?

byung82 / 2009/11/22 17:10:47 / 추천 0
 흠 오라클은 " 오류로 인식하는건가여 흠. system command를 필드명으로 했을때 " 로 해서 생성하지 않는가여 ㅎㅎ
오라클쪽은 잘 안봐서 ^^:
한번 10g 깔아서 확인해봐야겠네여 ㅎㅎ
ci세상 / 2009/11/22 18:57:39 / 추천 0
ci 엑티브 레코드가 모든 디비에 공용화는 좀 불가능해 보였습니다.^^

코어에 DB_active_rec.php 파일을 각 디비별로 분리해서 만드는것을 시도해 보고 있는데요 코어를 안거드리고 하는 방법이 현재로써는 마땅히 생기지를 않고 있네요;;
byung82 / 2009/11/23 15:58:49 / 추천 0
 흠
이렇게 변경은 어떤가여
$this->db->get_where( "ec_member", array( "mem_id" => $mem_id ) );

이렇게도 한번 테스트 해보시기 바랍니다.

ci세상 / 2009/11/23 17:03:20 / 추천 0

byung82 / 테이블명에 빽티 들어가는것이 문제인데요 요거 처리하는 방법을 올려주세요^^

아래는 sql plus에서 왜? 그런지 캡쳐해 올려드립니다. ~~

byung82 / 2009/11/23 17:10:35 / 추천 0
 ci세상님 $this->db->get_where( "ec_member", array( "mem_id" => $mem_id ) ); 이런씩으로 ar호출해도 같은 상태이신가여 ?
database는 extention을 사용하지못한다고 하니 직접 core를 수정하는수 말고는 없는데
$this->db->get_where( "ec_member", array( "mem_id" => $mem_id ) ); 이런 스타일로 해서 어떻게 되는지도 한번 결과 보여주세여 ㅎㅎ


ci세상 / 2009/11/23 17:21:47 / 추천 0
테스트를 제가 해드리네요 ^^
	function oracle_ar_select()
	{
		$mem_id = "test";
		$this->DB2->get_where( "customer", array( "C_NAME" => $mem_id ) ); 
		foreach ($query->result_array() as $row) {

			echo $row['C_NAME'];

		}
	}
==> 오류

A Database Error Occurred

Error Number:

 

SELECT * FROM "customer" WHERE "C_NAME" = 'test'




byung82 / 2009/11/23 17:44:00 / 추천 0
수정했습니다. 다른 DB들도 같은형상이시면 아래 내용을 참조하셔서 수정하면 됩니다
 http://codeigniter-kr.org/tip/view/349/page/1