IT story

mysql 확장은 더 이상 사용되지 않으며 향후 제거 될 예정입니다. 대신 mysqli 또는 PDO를 사용하십시오. [duplicate]

hot-time 2020. 5. 29. 23:45
반응형

mysql 확장은 더 이상 사용되지 않으며 향후 제거 될 예정입니다. 대신 mysqli 또는 PDO를 사용하십시오. [duplicate]


이 질문에는 이미 답변이 있습니다.

PHP에서 MySQL 서버에 연결하려고하면 다음 오류가 표시됩니다.

더 이상 사용되지 않음 : mysql 확장은 더 이상 사용되지 않으며 향후 제거 될 예정입니다. 123 행의 /path/to/filename.php에서 mysqli 또는 PDO를 대신 사용하십시오.

참조 행의 코드는 다음과 같습니다.

mysql_connect($server, $username, $password);

나는 그 주장이 정확하다는 것을 확신하고,이 정확한 코드는 문제없이 수년간 작동 해 왔습니다. 실제로, 나는 PHP에 대한 잘 짜여진 튜토리얼에서 그것을 얻었습니다.

  1. 왜 이런 일이 발생합니까?

  2. 어떻게 고칠 수 있습니까?

  3. 제외하도록 설정 error_reporting하여 사용 중단 오류를 억제 할 수 있음을 이해합니다 .php.iniE_DEPRECATED

    error_reporting = E_ALL ^ E_DEPRECATED
    

    그렇게하면 어떻게 되나요?


  1. 왜 이런 일이 발생합니까?

    전체 ext/mysql접두사라는 이름의 모든 기능을 제공하는 PHP 확장은 mysql_, 한 공식적으로 PHP의 v5.5.0에서 사용되지PHP의 V7에서 제거 .

    원래 PHP v2.0 (1997 년 11 월)에서 MySQL v3.20 용으로 도입되었으며 2006 년 이후로 새로운 기능이 추가되지 않았습니다. 새로운 기능이 없기 때문에 복잡한 보안 취약점으로 인해 기존 코드를 유지하기가 어렵습니다.

    이 설명서에는 2011 년 6 월 이후 새 코드에서 사용되지 않는다는 경고가 포함되어 있습니다.

  2. 어떻게 고칠 수 있습니까?

    오류 메시지에서 알 수 있듯이 MySQLiPDO_MySQL을 고려할 수있는 두 가지 다른 MySQL 확장이 있습니다. 둘 중 하나를 대신 사용할 수 있습니다 ext/mysql. 둘 다 v5.0부터 PHP 코어에 있었으므로 이러한 지원 중단 오류가 발생하는 버전을 사용하는 경우 거의 모든 설치 작업을 즉시 시작할 수 있습니다.

    그것들은 약간 다르지만 트랜잭션, 저장 프로 시저 및 준비된 명령문에 대한 API 지원 ( SQL 주입 공격 을 막는 가장 좋은 방법 제공)을 포함하여 이전 확장에 비해 많은 이점을 제공 합니다 . PHP 개발자 인 Ulf Wendel은 기능을 철저히 비교했습니다 .

    Hashphp.org에는 PDO로 마이그레이션ext/mysql 하는 훌륭한 튜토리얼이 있습니다.

  3. 제외하도록 설정 error_reporting하여 사용 중단 오류를 억제 할 수 있음을 이해합니다 .php.iniE_DEPRECATED

    error_reporting = E_ALL ^ E_DEPRECATED
    

    그렇게하면 어떻게 되나요?

    예, 이러한 오류 메시지를 억제 ext/mysql하고 당분간 기존 확장을 계속 사용할 수 있습니다. 그러나 실제로는 그렇게하지 말아야합니다. 이것은 확장 기능이 향후 버전의 PHP와 함께 번들로 제공되지 않을 수 있다는 마지막 경고입니다 (실제로 언급했듯이 PHP v7에서 제거되었습니다). 대신, 너무 늦기 전에이 기회를 통해 지금 애플리케이션을 마이그레이션해야합니다 .

    또한이 기술은 확장 기능 과 관련된 메시지뿐만 아니라 모든 E_DEPRECATED 메시지를 표시하지 않습니다 ext/mysql. 따라서 애플리케이션 코드에 영향을 줄 PHP의 다른 변경 사항을 알지 못할 수 있습니다. 물론 PHP의 오류 제어 연산자 (예 : 관련 행 앞에 추가) 를 사용하여 문제가있는 표현식에서 발생하는 오류 만 억제 할 수 있지만, 이는 해당 표현식에서 발생하는 모든 오류 @아니라 오류 만 억제 E_DEPRECATED합니다.


어떻게해야합니까?

  • 새로운 프로젝트를 시작하고 있습니다.

    없습니다 이유 절대적으로 사용하는 ext/mysql대신 다른, 현대, 확장 -choose 하나와 그들이 제공하는 혜택의 보상을 얻을이.

  • 현재에 의존하는 (자신의) 레거시 코드베이스가 있습니다 ext/mysql.

    회귀 테스트를 수행하는 것이 현명합니다. 영향을 미칠 수있는 모든 잠재적 영역을 식별하고 각 영역을 중심으로 계획 한 다음 준비 환경에서 솔루션을 철저히 테스트 할 때까지는 아무것도 변경하지 않아야합니다 (특히 PHP 업그레이드).

    • 우수한 코딩 관행에 따라 응용 프로그램은 느슨하게 통합 / 모듈 방식으로 개발되었으며 데이터베이스 액세스 방법은 모두 새로운 확장 중 하나로 쉽게 교체 할 수있는 한 장소에 자체적으로 포함되어 있습니다.

      30 분 동안이 모듈을 다시 작성하여 다른 최신 확장 중 하나를 사용하십시오. 철저히 테스트하십시오. 나중에 추가 개선 사항을 도입하여 제공하는 혜택의 보상을 얻을 수 있습니다.

    • 데이터베이스 액세스 방법은 모든 곳에 분산되어 있으며 새로운 확장 중 하나를 쉽게 교체 할 수 없습니다.

      현재 PHP v5.5로 업그레이드해야하는지 고려하십시오.

      ext/mysql그들이 제공하는 혜택의 보상을 얻을 수 있도록보다 현대적인 다른 확장 으로 대체 할 계획을 세워야 합니다. 데이터베이스 액세스 방법을보다 모듈화 된 구조로 리팩토링 할 수있는 기회로 사용할 수도 있습니다.

      당신이있는 경우에는 긴급 바로 PHP를 업그레이드 할 필요가, 당신은 당분간 중단 오류를 억제하는 것이 좋습니다 :하지만 첫째도 발생되고있는 다른 중단 오류를 식별해야합니다.

  • 에 의존하는 타사 프로젝트를 사용하고 ext/mysql있습니다.

    현재 PHP v5.5로 업그레이드해야하는지 고려하십시오.

    Check whether the developer has released any fixes, workarounds or guidance in relation to this specific issue; or, if not, pressure them to do so by bringing this matter to their attention. If you have an urgent need to upgrade PHP right away, you might consider suppressing deprecation errors for the time being: but first be sure to identify any other deprecation errors that are also being thrown.

    It is absolutely essential to perform regression testing.

참고URL : https://stackoverflow.com/questions/13944956/the-mysql-extension-is-deprecated-and-will-be-removed-in-the-future-use-mysqli

반응형