>데이터 베이스 >MySQL 튜토리얼 >MySQL이 오류 2014: '버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다'를 반환하는 이유는 무엇입니까?

MySQL이 오류 2014: '버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다'를 반환하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-23 15:42:10823검색

Why Does MySQL Return Error 2014:

MySQL 오류 2014의 원인: 버퍼링되지 않은 다른 쿼리가 활성화되어 있는 동안 쿼리를 실행할 수 없습니다.

MySQL의 클라이언트 프로토콜은 결과가 다음과 같은 경우 여러 쿼리의 동시 실행을 제한합니다. 이전 쿼리가 완전히 검색되지 않았습니다. 이러한 제한은 버퍼링된 쿼리처럼 행을 즉시 캐시하는 대신 행을 증분적으로 가져오는 일부 쿼리의 버퍼링되지 않은 특성으로 인해 발생합니다.

버퍼링되지 않은 쿼리를 실행하고 쿼리에서 모든 행을 검색하기 전에 다른 쿼리를 실행하려고 시도하는 경우 먼저 MySQL은 "버퍼링되지 않은 다른 쿼리가 활성화되어 있는 동안 쿼리를 실행할 수 없습니다."라는 오류를 반환합니다.

에뮬레이트 준비됨 명령문

PDO::ATTR_EMULATE_PREPARES는 준비된 명령문을 에뮬레이션할지 또는 기본 MySQL 준비 명령문으로 실행할지 여부를 지정합니다. false로 설정하면 버퍼링되지 않은 PHP 쿼리를 사용하면 오류 2014가 발생할 수 있습니다. 이는 쿼리 결과에 대한 PHP의 내부 캐싱 메커니즘이 버퍼링되지 않은 쿼리를 제대로 처리하지 못하기 때문입니다.

오류 해결하기

이 문제를 해결하는 방법에는 여러 가지가 있습니다. 오류:

  • 버퍼 쿼리 사용: PDO::MYSQL_ATTR_USE_BUFFERED_QUERY를 활성화하면 쿼리가 버퍼 모드에서 실행되어 자동으로 모든 행을 한 번에 가져옵니다. 그러나 결과 집합이 큰 경우 메모리를 많이 사용할 수 있습니다.
  • 모든 행 가져오기: 쿼리에서 fetchAll()을 호출하면 모든 행이 검색되고 결과 커서가 닫힙니다. , 오류 없이 후속 쿼리를 실행할 수 있습니다.
  • 커서 닫기: 다음으로 커서를 닫습니다. closeCursor()는 버퍼링되지 않은 쿼리와 관련된 MySQL 리소스를 해제하고 후속 쿼리가 실행되도록 허용합니다. 그러나 이렇게 하면 버퍼링되지 않은 쿼리에서 나머지 행을 가져오는 것이 방지됩니다.

모범 사례

이 오류가 발생하지 않도록 하려면 다음을 수행하는 것이 좋습니다.

  • 제한된 쿼리를 가져오는 버퍼링되지 않은 쿼리의 경우 기본적으로 버퍼링된 쿼리 또는 fetchAll()을 사용합니다. 행 수.
  • 루프 내에서 내부 쿼리를 여러 번 실행하면 오류가 복잡해질 수 있으므로 필요하지 않은 경우 쿼리 중첩을 피하세요.
  • 해제할 데이터 가져오기를 마친 후 커서를 닫습니다. 서버 리소스를 확보하고 오류 발생을 방지하세요.
  • 메모리 효율적이고 에뮬레이션 준비를 지원하는 mysqlnd 드라이버로 마이그레이션하는 것을 고려해 보세요. 진술.

위 내용은 MySQL이 오류 2014: '버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다'를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.