가능한 경우 저장 프로 시저를 사용해야합니다. 그렇게하면 성능, 보안 및 코드 유지 관리가 향상됩니다. 이것이 첫 번째 접근 방법입니다.
SP 쿼리를 DAL에서 분리하려는 경우 데이터베이스에 저장하지 않는 이유는 무엇입니까? 다른 쿼리를 추출하려면 쿼리가 필요하므로 추상화를 위해 SQL 쿼리를 데이터베이스에 저장하는 것이 이상하게 보일 수 있습니다. 이것은 실제로 매우 일반적인 접근 방식으로, 특정 조건과 일치하는 쿼리를 선택할 수 있으며 (필요할 경우) 쿼리를 동적으로 구축 할 수 있습니다.
또 다른 방법은 쿼리가 동적으로 작성되는 쿼리 클래스를 만드는 것입니다.
class FruitQuery {
...
public function addTypeCriteria($type) {
$this->internalSQLCriterias[] = "fruit=:type";
$this->internalSQLParameters[] = array(':type', $type);
}
...
public function create() {
$this->internalSQLQuery = "SELECT ... FROM Fruits";
if (sizeof($this->internalSQLCriterias) > 0) {
$this->internalSQLQuery .= " WHERE ";
$moreThanOne = '';
foreach ($this->internalSQLCriterias as $criteria) {
$this->internalSQLQuery .= $moreThanOne . $criteria;
$moreThanOne = " AND ";
}
}
}
...
public function execute() {
/* Bind the parameters to the internalSQLQuery, execute and return results (if any) */
}
...
이 클래스는 절대적으로 어떤 방법으로 완료되지 않으며, 당신은 그것의 구조를 재고 할 수 있습니다 -하지만 당신은 아마 내가 만들려고 점을 얻는다. :) 물론 보안 위반을 피하기 위해 쿼리 빌더에 대한 입력을 필터링해야합니다!
저장된 procs와 views를 저장하려고합니다. 또한 엄격한 작업 집합을 수행하여 잠재적 인 보안 문제를 상당 부분 해결할 수 있습니다. –