TIP게시판

제목 sqlsrv 드라이버 사용시 버그
글쓴이 오봉구 작성시각 2013/11/02 22:05:31
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 12362   RSS
 sqlsrv 드라이버로 개발을 진행중인데요,

액티브레코드로 개발하다보면 당연히 되야 되는데,

안되서 애먹다가 코어를 까보면 코드가 이상한 부분이 있네요,


sqlsrv 드라이버로 delete 문에다가 where랑 like 를 적용했는데요,

실제로 쿼리결과는 like는 생략하고 where만 적용되더라구요,


DB_active_rec.php 파일 1574번째 줄에 보면

$this->_delete($table, $this->ar_where, $this->ar_like, $this->ar_limit);


위와 같은 파라미터로 함수를 호출합니다.

mysql 드라이버에서는 위 함수가

function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$c>
 
if (count($where) > 0 OR count($like) > 0)
{
$c ";
$conditions .= implode("\n", $this->ar_where);
 
if (count($where) > 0 && count($like) > 0)
{
$conditions .= " AND ";
}
$conditions .= implode("\n", $like);
}
 
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
 
return "DELETE FROM ".$table.$conditions.$limit;
}

이렇게 구현되어 있구요,

그런데 sqlsrv 드라이버에는

        function _delete($table, $where)
{
return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
}

이렇게 구현되어 있네요,


mysql 드라이버의 _delete 함수의 내용을 sqlsrv 드라이버의 _delete 함수에 그대로 적용하시고,

limit 관련된 부분만 제거해주시거나,

top으로 바꾸어 주시면 될것같습니다.


저는 임의로 $limit 처리 하는 부분만 주석처리해서 쓰고 있습니다.
 다음글 PHP 메모리 릭(누수) 관련 슬라이드쉐어 자료 (1)
 이전글 배열이름의 다중업로드 구현방법 (input type=f...

댓글

구치리 / 2013/12/13 03:20:20 / 추천 0
저도 이 부분을 발견해서 어떻게 제보를 드릴까 고민하고 있었는데
해결책까지 알려주시네요
감사합니다
한대승(불의회상) / 2013/12/13 10:03:04 / 추천 0
Mysql 위주로 사용하다 보니 다른 드라이버에서 발생하는 버그를 알지 못하게 되는데 좋은 정보 감사 합니다.