MySQL, MySQLi 및 PDO의 차이점은 무엇입니까? [닫은]


128

MySQL, MySQLiPDO 의 차이점은 무엇입니까 ?

PHP-MySQL과 함께 사용하기에 가장 적합한 것은 무엇입니까?

답변:


100

PHP에서 MySQL을 사용하는 세 가지 일반적인 방법이 있습니다. 이것은 일부 기능 / 차이를 설명 하는 API 선택 : PHP를 :

  1. (더 이상 사용되지 않음) mysql 함수 는 절차적이고 수동 이스케이프를 사용합니다.
  2. MySQLi 는 객체 지향 및 절차 적 버전으로 mysql 함수를 대체합니다. 준비된 진술을 지원합니다.
  3. PDO (PHP Data Objects)는 다른 많은 데이터베이스 중에서 MySQL을 지원하는 일반적인 데이터베이스 추상화 계층입니다. 준비된 진술과 데이터 반환 방식에 상당한 유연성을 제공합니다.

준비된 문장과 함께 PDO를 사용하는 것이 좋습니다. 잘 설계된 API이며 필요한 경우 다른 데이터베이스 ( ODBC 를 지원하는 데이터베이스 포함 ) 로보다 쉽게 이동할 수 있습니다 .


9
절차상의 경우 mysql _ * () 함수를 사용해야한다는 혼란이 종종 있습니다. OO의 경우 mysqli를 사용합니다! 사실 mysqli는 mysql의 초기 (PHP 4) 구현을 완전히 대체합니다. 절차 스타일과 OO 스타일을 모두 mysqli와 함께 사용할 수 있습니다.
Patrick Allaert

@ 패트릭 감사합니다. 이 문제를 해결했습니다.
Matthew Flaschen

46

이들은 MySQL 백엔드에 액세스하는 다른 API입니다.

  • MySQL은 역사적 API입니다
  • mysqli는 역사적 API의 새로운 버전입니다. 더 나은 성능과 더 나은 기능 세트를 가져야합니다. 또한 API는 객체 지향적입니다.
  • PDO_MySQL 은 PDO 용 MySQL입니다. PDO는 PHP에 도입되었으며 프로젝트는 모든 데이터베이스 액세스에 공통 API를 만드는 것을 목표로하므로 이론상 코드를 변경하지 않고 RDMS간에 마이그레이션 할 수 있어야합니다 (쿼리에 특정 RDBM 기능을 사용하지 않는 경우) ), 객체 지향적입니다.

따라서 어떤 종류의 코드를 생성 하느냐에 달려 있습니다. 객체 지향 레이어 또는 일반 기능을 선호하는 경우 ...

내 조언은

  1. PDO
  2. MySQLi
  3. MySQL

또한 내 생각에 mysql API는 향후 릴리스에서 삭제 될 것입니다 PHP.


3
더 이상 느낌이 없습니다 : PHP7은 mysql API를 제거하고 PDO와 mysqli를 남겼습니다
Manuel

3

mysqli 는 mysql의 향상된 버전입니다.

PDO 확장 은 PHP에서 데이터베이스에 액세스하기위한 가볍고 일관된 인터페이스를 정의합니다. PDO 인터페이스를 구현하는 각 데이터베이스 드라이버는 데이터베이스 별 기능을 일반 확장 기능으로 노출 할 수 있습니다.


4
수동 파일에서 복사하는 것은 그리 유용하지 않습니다.
XuDing

3

특히 MySQLi 확장은 이전 MySQL 확장에 비해 다음과 같은 매우 유용한 이점을 제공합니다.

OOP 인터페이스 (절차 외에) 준비된 명령문 지원 트랜잭션 + 스토어드 프로 시저 지원 더 나은 구문 속도 개선 향상된 디버깅

PDO 확장

PHP Data Objects 확장은 데이터베이스 추상화 계층입니다. 특히 이것은 MySQL 인터페이스가 아닙니다. 많은 데이터베이스 엔진 (물론 MYSQL 포함)을위한 드라이버를 제공하기 때문입니다.

PDO는 데이터베이스 엔진이 변경 될 때이를 최소화하기 위해 코드 변경을 최소화하는 일관된 API를 제공하는 것을 목표로합니다. PDO를 사용할 때 코드는 일반적으로 사용중인 드라이버를 변경하여 많은 데이터베이스 엔진에서 "작동"합니다.

PDO는 데이터베이스 간 호환뿐만 아니라 MySQL 드라이버를 사용하는 동안 준비된 명령문, 저장 프로 시저 등을 지원합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.