2011-02-09 4 views
1

사실 PHP에 데이터베이스 래퍼가 필요한 이유가 궁금합니다. MySQLi 또는 PDO 용 래퍼와 비슷합니다. PDO/MySQLi 클래스를 호출하는 클래스입니다. 왜 내가 그것을 필요로해야합니까? 이점? 나는 하나를 만들려고 노력할 것입니다. 단지 주된 목표를 얻지 못합니다. 왜 내가 그것을 필요로합니까 ?? =]왜 데이터베이스 래퍼를 만들어야합니까?

+0

짧은 답변 : 그렇지 않습니다. –

+4

PDO는 이미 래퍼입니다. 클래스를 확장하여 필요하고 제공되지 않는 몇 가지 사항을 추가 할 수 있지만, 그렇지 않은 경우에는 처음부터 직접 래퍼를 작성하는 것이 매우 큰 작업입니다. –

답변

0

PDO과 같은 추상화는 더 안전하게하기위한 것입니다. 당신은 당신이 원하는 데이터베이스 실행이 이런 일을 방지 할 것을 의미하는 "강력한 형식"될 것이라고 말할 수 있습니다 :

$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";

sql-injection이라는 것을 될 수 있습니다.

PDO을 사용할 때 "x는 유형 문자열입니다"또는 데이터베이스에서 사용하는 유형을 명시 적으로 말합니다. 이런 식으로 문은 "준비"될 수 있으므로 새로운 SQL 코드를 SQL 문에 "삽입"할 수 없습니다. 어느 것이 더 안전합니다.

이것은 이유 중 하나 일 뿐이지 만 가장 큰 이유 중 하나 일 가능성이 큽니다. 학습 목적이 아닌 경우 자체 래퍼/추상화를 작성하지 마십시오. 이미 많은 좋은 것들이 있습니다.

다음은 Database abstraction in PHP에 관한 좋은 소식입니다.

0

나는 당신이 여기에서 묻고있는 것이 명확하지 않다. 하지만 나는 PDO가 이미 당신이 말하는 것을 가정 할 것입니다, 그것은 "data-access abstraction layer"입니다. 이것은 동일한 코드를 사용하여 다양한 DBMS와 대화 할 수 있고 코드를 변경하지 않고도 쉽게 전환 할 수 있다는 것을 의미합니다 (SQL을 사용하면 SQL을 제공합니다). 당신이 전환하는 것과 호환됩니다.)

MySQLi는 MySQL 데이터베이스에 직접 액세스하는 데 사용되는 확장이며, Oracle 및 기타 DBMS 확장도 가능합니다.

+0

답장을 보내 주셔서 감사합니다. 위를보세요. =] – daGrevis

+1

그래, 시작했을 때 거기에 없었어! –

2

적어도 두 가지 이유가있을 수 있습니다. 1) 리팩토링. 기술 변화로 인해 필요한 변경 사항을 현지화하기 위해 노력해야합니다 (위험없이 신속하게 수행하기 위해). 몇 년 전에는 MySQLi 나 PDO가 없었습니다. 고전적인 MySQL 확장을위한 래퍼를 개발했다면 모든 래퍼 클라이언트를 변경하지 않고도 PDO로 쉽게 전환 할 수있었습니다. 반면에 mysql_connect()에서 mysqli_connect()으로 수백 건의 전화를 대체하는 것은 그렇게 매력적이지 않습니다.

2) 테스트 가능성. 자동화 된 테스트를 실습하고 간접 참조 (래퍼) 계층을 추가하면 쉽게 가짜 테스트로 대체 할 수 있습니다. 따라서 쿼리가 실제로 데이터베이스로 이동하는지 또는 예를 들어 파일에 기록되는지 여부를 제어 할 수 있습니다. 그 결과 더 빠르고 관리하기 쉬운 테스트가 가능합니다.

관련 문제