CI 묻고 답하기

제목 mysql의 password() 어떻게 사용하면 되나요?
글쓴이 탁주나한잔 작성시각 2012/04/24 05:23:11
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 24296   RSS
 전에는 예를 들어 다음과 같이 사용했습니다.

$sql= sprintf("select * from `$table[admin_table]` where user_id=%s and user_passwd=password(%s)",$d->Quote_smart($_POST['username']),$d->Quote_smart($_POST['password']));

그런데, CI의 get_where()에서는 어떤식을 사용해야 되나요? 서치를 해보았는데, 제가 원하는 답을 얻지못해 질문드립니다,


$this->db->get_where($this->table, array('user_id'=>$_POST['username'], 'user_password'=>password($_POST['password'])));
array로 보내야 하는데 모르겠습니다.
 다음글 Call to a member function sele... (25)
 이전글 CI 이제 시작했는데, 이렇게 하는게 맞는걸까요? (5)

댓글

한대승(불의회상) / 2012/04/24 09:53:41 / 추천 0
Mysql 의 내장함수를 호출 하는 방법은 매뉴얼의 DataBase 항목에 자세히 기술되어 있습니다만...
처음 접하게 되면 해석(?)이 잘 되지 않는 것이 사실 입니다.

http://cikorea.net/user_guide_2.1.0/database/active_record.html#select

여기를 살펴보게 되면 Select  마지막 절에 사용하는 방법이 나옵니다.

$this->db->where("user_password = password('{$_POST['password']}')", NULL, FALSE);
단, 이렇게 사용시 SQL 인젝션 관련 문제가 발생 할 수도 있으므로 코더의 세심한 주의가 필요 합니다.

* 보너스

Select시 함수 사용법
$this->db->select("password('1111')", FALSE);
Insert 또는  Update 시 함수 사용법
$this->db->set('reg_time', 'sysdate()', FALSE);
$this->db->set('no', 'no+1', FALSE);



탁주나한잔 / 2012/04/24 10:42:04 / 추천 0
 답변 감사드립니다.

그냥 이렇게 사용하니까 되기는 합니다.

$this->db->query("select * from {$this->table} where user_id='{$theuser_id}' and user_passwd=password('{$theuser_passwd}')");


그런데, 아직 이해가 정확히 안되는것이, 내장함수를 써서 제가 원하는 결과를 얻으려면 쿼리를 두번 사용해야할까요? 매뉴얼을 다시 보니 get_where()과 where()의 쓰임이 다르기때문에 한번에 사용못할것 같은데요. 

mysql 내장함수를 정확히 모르니 어떤식으로 질문을 해야하는지도 모르겠습니다.


변종원(웅파) / 2012/04/24 12:12:16 / 추천 0
액티브 레코드를 쓰면 번거로울 때도 있고 편리할 때도 있습니다.

전체를 가져올 경우 select 구문은 생략하면 됩니다. 

$this->db->where("user_id", $this->input->post('user_id')); 
$this->db->where("user_password = password('{$this->input->post('password')}')", NULL, FALSE); 
$this->db->get($table_name);
탁주나한잔 / 2012/04/24 21:55:12 / 추천 0
 아, 이제 어느정도는 느낌이 오는것 같습니다. 

답변 주신분들 감사합니다.