제목 | sqlsrv 드라이버 사용시 버그 | ||
---|---|---|---|
글쓴이 | 오봉구 | 작성시각 | 2013/11/02 22:05:31 |
|
|||
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 위주로 사용하다 보니 다른 드라이버에서 발생하는 버그를 알지 못하게 되는데 좋은 정보 감사 합니다.
|
해결책까지 알려주시네요
감사합니다