2012-07-26 2 views
4

면책 조항 :이 질문은 엄격하게 그것을 지원하는 MySQL 및 데이터베이스 추상화 계층에 관한 것입니다.PDO와 MySQLi는 추상화 계층에서 MySQL 기능을 사용합니까?

PHP 웹 사이트에서는 PHP의 mysql_ 기능을 사용하는 것이 좋습니다. 대신 개발자가 PDO 또는 MySQLi을 사용하도록 권장합니다.

여기 내 질문이있다 : 모든 추상화 아래의 MySQL에 관해서는, PDO와 MySQLi가 단지 mysql_ 함수를위한보다 안전하고 객체 지향적 인 래퍼가 되는가?

그렇다면 CodeIgniter 및 Symfony와 같은 프레임 워크가 MySQLi 위에 레이어를 배치하여 불필요한 래퍼지를 만드는 것이 아니라 기본 PHP mysql_ 위에 레이어를 넣을 수 있습니까?

사실이 아니라면 숙련 된 개발자가 mysql_을 사용하지 말고 PDOMySQLi이 실제로 추상화를 수행하는 이유를 알고 싶습니다.

(또한 코드를 살펴 보도록하지 마십시오.) +100 현상금을드립니다.

답변

2

여기 내 질문이있다. 모든 추상화 아래에서 mysql과 관련하여 PDO와 MySQLi가 mysql_ 기능을위한보다 안전하고 객체 지향적 인 래퍼인가?

아니요. xdazz와 마찬가지로 MySQLi와 PDO는 모두 C로 구현되어있어 mysql_ * 함수를 래핑하지 않습니다.

그리고 이것이 사실이라면 CodeIgniter 및 Symfony와 같은 프레임 워크가 MySQLi의 맨 위에 레이어를 배치하여 불필요한 래퍼지를 생성하여 네이티브 PHP mysql_의 맨 위에 레이어를 넣을 수 있습니까?

고려해야 할 또 다른 이유가 있습니다. CodeIgniter와 Symfony는 기본 인터페이스가 해당 인터페이스에서 사용하기에 충분하지 않기 때문에 기본 인터페이스보다 인터페이스를 만들었습니다. 나 자신은 PDO 위에 레이어를 작성했다.이 레이어는 디폴트 설정 (예 : PDO가 기본적으로 조용한 오류 모드)을 설정하고 더 직관적 인 API를 작성한다. PDO는 소프트웨어의 점잖은 조각이지만, setAttribute($attr, $value)은 정말로 내 차 한잔이 아닙니다.

1

아니요, PDO 및 MySQLi는 mysql_ 함수의 래퍼가 아니며 C 수준, 다른 확장으로 구현됩니다.

래퍼 인 경우 --with-mysqli 등등은 필요하지 않습니다.

2

MySQLi 기능 및 클래스 메소드는 C 레벨 API에 대한 바인딩입니다. 일반적으로 준비된 문 때문에이 기능을 사용하는 것이 좋습니다. in PDO, in MySQLi. 준비된 문장을 사용하는 것은 SQL 주입을 방지하는 좋은 방법입니다.