[php] PHP 사용시 MySQL과 MySQLi 비교

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

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



답변

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

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

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

답변

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).

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


답변

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


답변

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


답변

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

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


답변

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


답변