PHP 사용시 MySQL과 MySQLi 비교


167

MySQL 또는 MySQLi 중 어느 것이 더 낫습니까? 그리고 왜? 어느 것을 사용해야합니까?

성능 측면뿐만 아니라 다른 관련 기능이 더 좋습니다.

답변:


111

MySQL Enhanced Extension Overview를 살펴보면 , 둘 사이의 차이점에 대해 알아야 할 모든 것을 알려줄 것이다.

유용한 주요 기능은 다음과 같습니다.

  • 객체 지향 인터페이스
  • 준비된 진술에 대한 지원
  • 여러 문장에 대한 지원
  • 거래 지원
  • 향상된 디버깅 기능
  • 임베디드 서버 지원.

1
네, 가장 좋은 방법은 mysqli 지원하는 문을 준비한다는 것입니다
jondinham을

7
또한 MySQLi는 MySQL 5 이상에서만 작동합니다. 이것은 더 이상 관련이 없지만 MySQLi가 나왔을 때 MySQL 4는 여전히 표준이었습니다. 이것은 확장 기능이 분리 된 이유 중 하나이며 이전 MySQL 드라이버는 호환성을 위해 유지됩니다.
zneak

6
6 년 동안 상황이 많이 바뀌 었다는 점은 주목할 가치가 있습니다. mysql_*()이제 더 이상 사용되지 않으며 곧 제거 될 예정입니다. 새 코드에는 사용하지 않아야합니다.

더 적은 CPU와 RAM으로 무엇을 선택해야합니까?
Mahdi Jazini

1
아래 Gordon의 답변을 참조하십시오. 이전 mysql 확장은 더 이상 지원되지 않으므로 어쨌든 mysqli 확장을 사용하는 것이 좋습니다.
Mark Davidson

70

mysql, mysqli 및 PDO 중에서 선택하는 데 도움이되는 매뉴얼 페이지가 있습니다.

PHP 팀은 새로운 개발을 위해 mysqli 또는 PDO_MySQL을 권장합니다.

mysqli 또는 PDO_MySQL 확장을 사용하는 것이 좋습니다. 새로운 개발에는 이전 mysql 확장을 사용하지 않는 것이 좋습니다. 자세한 기능 비교 매트릭스가 아래에 제공됩니다. 세 확장의 전반적인 성능은 거의 같은 것으로 간주됩니다. 확장 기능의 성능은 PHP 웹 요청의 총 실행 시간 중 일부에 불과합니다. 종종 영향은 0.1 % 정도로 낮습니다.

이 페이지에는 확장 API를 비교하는 기능 매트릭스도 있습니다. mysqli와 mysql API의 주요 차이점은 다음과 같습니다.

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

라이브러리를 비교하는 추가 기능 매트릭스가 있습니다 (new mysqlnd 대 libmysql).

그리고 매우 철저한 블로그 기사


15

mysqli 사용을 포기했습니다. 단순히 너무 불안정합니다. mysqli를 사용하여 PHP를 중단시키는 쿼리가 있지만 mysql 패키지와 잘 작동합니다. 또한 mysqli는 LONGTEXT 열에서 충돌합니다 . 이 버그는 적어도 2005 년 이후 다양한 형태로 제기되었으며 여전히 깨졌습니다 . 솔직히 준비된 문장을 사용하고 싶지만 mysqli는 충분히 신뢰할 수 없습니다 (그리고 그것을 고치는 사람은 아무도 없습니다). 준비된 진술을 정말로 원한다면 PDO와 함께하십시오.


2
PDO도 완벽하지는 않지만 (불량한 코어 덤프를 사용 했음) 적어도 사용자 기반이 더 넓기 때문에 아마도 더 안전한 내기 일 것입니다.
troelskn

@troelskn, 그래서 정상적인 mysql이 더 좋지 않습니까?
Pacerier

@Pacerier 더 이상 사용되지 않는다고 생각하면 아니오라고 말할 것입니다. 일반적으로 PDO가 표준 선택이 된 것 같습니다.
troelskn

@troelskn, 그러나 더 이상 사용되지 않는다고해서 향후 버전에는 없을 것입니다. 안정성 측면에서 정상적인 MySQL은 더 안정적이지 않습니까?
Pacerier

1
당신이 그것을 사용하는 경우이 시점에서 (5.5) PHP 적극적으로 경고를 발행합니다 : php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLi는 MySQL 개선을 의미합니다. MySQL 바인딩에 대한 객체 지향 인터페이스로 사용하기가 더 쉽습니다. 또한 준비된 진술에 대한 지원을 제공합니다 ( 매우 유용합니다). PHP 5를 사용하는 경우 MySQLi를 사용하십시오.


5

더 나은 것은 PDO입니다. 덜 잔인한 인터페이스이며 MySQLi와 동일한 기능을 제공합니다.

준비된 명령문을 사용하면 SQL 삽입 가능성이 없어지기 때문에 좋습니다. 서버 측 준비 명령문을 사용하면 왕복 수가 증가하므로 좋지 않습니다.


3

나를 위해 준비된 진술은 필수 기능입니다. 보다 정확하게는 매개 변수 바인딩 (준비된 명령문에서만 작동). SQL 명령에 문자열을 삽입하는 유일한 방법입니다. 나는 '탈출'기능을 정말로 믿지 않습니다. DB 연결이 이진 프로토콜인데 매개 변수에 ASCII 제한 서브 프로토콜을 사용하는 이유는 무엇입니까?


1
PDO는 일반적으로 클라이언트 측에서 준비된 명령문을 사용하므로 서버에서 실제로 준비되지는 않습니다. 그러나 서버 자원을 절약하고 일반적으로 성능이 우수하므로 좋습니다. 준비된 진술 "에뮬레이션"은 항상 올바르게 탈출합니다.
MarkR

1
"항상"과 "탈출"은 함께 갈 때 위험한 단어입니다. 모르겠다. 아마도이 코드는 완전히 버그가 없다. 그러나 실제 이진 프로토콜을 사용할 수있을 때 왜 귀찮게합니까? 성능면에서 벤치마킹이 가능합니다.
Javier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.