CI 묻고 답하기

제목 데이터베이스 입력시 escaping하지 않으려고 합니다.
글쓴이 밥아저씨 작성시각 2013/02/05 16:24:09
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 14129   RSS
메모장을 만드는 중입니다.
사용자가 입력하기에 따라서
코드의 내용이 될수도 있고
html내용이 될수도 있지요.

요런 부분 때문에 escaping하지 않고
그대로 insert하고 출력할때는 htmlspecialchars를 이용하려고 합니다.

그런데 insert시에 계속 문법 오류가 난다고 하네요.
public function set_note($valArray = array())
{
 $key = $valArray['key'];
 $content = $valArray['content'];
 $sql = "INSERT INTO note (key, content) VALUES ('".$key."', '".$content."')";
 $this->db->query($sql);
}

그리고 혹시 escaping하지 않고 insert 하는데에
좋은 코드 팁 하나 알 수 있을까요? ㅠ_ㅠ (보안적인 부분이라던지요...)

 다음글 form_validation 질문 드립니다. (4)
 이전글 Tank_auth 질문 드립니다. - (★인증코드 액박... (3)

댓글

한대승(불의회상) / 2013/02/05 17:24:28 / 추천 0
$sql = "INSERT INTO note (key, content) VALUES (?, ?)";
$thi->db->query($sql, array($key, $content));
요렇게 하시면 될듯 한데.. 

밥아저씨 / 2013/02/05 18:23:03 / 추천 0
 이상합니다. 두개이상 insert 하려고 하면
1064오류가 나면서 절대 안들어가지네요 ㅠㅠ
이 코드가 안됩니다. ㅠㅠ;;

public function set_note($valArray = array()) {  $key = $valArray['key'];  $content = $valArray['content'];    $sql = 'INSERT INTO note (key, content) VALUES (?, ?)';  $this->db->query($sql, array($key, $content)); }

요 코드는 잘 들어가집니다. ㅠㅠ;;;
public function set_note($valArray = array()) {  $content = $valArray['content'];    $sql = 'INSERT INTO note (content) VALUES (?)';  $this->db->query($sql, array($content)); }


key 칼럼은 varchar로 40자 sha1이 들어가지게 됩니다.
값은 제대로 출력이 됩니다. ㅠ;;

그런데 바인딩으로 넣으면 이스케이프 자동으로 처리되는거 아닌가요?
< 가 엔퍼센트 엘 티로 변한다던지...ㅠ_ㅠ;;

밥아저씨 / 2013/02/05 18:52:11 / 추천 0
 오잉 -.-;;;;

테이블명과 컬럼명에 ` (역슬래쉬)를 포함시키니 되네요 갑자기....
원래 안해도 되는거 아니였나여;;;


$sql = "INSERT INTO `note` (`key`, `content`) VALUES (?, ?)";

그런데 이스캐이프 시키면 안되는데 바인딩은 자동 이스케이프가 맞군요,,
일단 직접 쿼리문을 몽땅 작성하는 방식으로 해야겠습니다 __);;
쿠우울 / 2013/02/05 18:59:48 / 추천 0
 key 라는 mysql 예약어 때문에 에러가 발생했던것 같네요.

테이블 또는 컬럼 명에 예약어가 들어가기되면 쿼리 실행 시 오류가 발생할 수 있습니다.
간혹 설정에 따라서 에러가 안나는 경우가 있긴 하지만요..^^;
밥아저씨 / 2013/02/05 19:28:09 / 추천 0
 쿠우울// 그렇군요... 감사합니다 __)
한대승(불의회상) / 2013/02/06 08:24:28 / 추천 0
밥아저씨// 친절한 CI 네요. 에고고 요즘은 감이 떨어지는듯한 느낌이 드네요. ㅡㅡ;;