>  기사  >  백엔드 개발  >  MySQL에서 \"버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다\" 오류를 해결하는 방법은 무엇입니까?

MySQL에서 \"버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다\" 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-16 00:31:03372검색

How to Resolve the

"버퍼링되지 않은 다른 쿼리가 활성 상태인 동안 쿼리를 실행할 수 없습니다." 오류의 원인 이해

MySQL에서는 클라이언트 프로토콜이 다중 실행을 제한합니다. 버퍼링되지 않은 하나 이상의 쿼리가 부분 결과를 요청할 때 동시에 쿼리합니다. 이전 쿼리에서 여전히 데이터가 생성되는 동안 두 번째 쿼리를 실행하려고 하면 "버퍼링되지 않은 다른 쿼리가 활성화되어 있는 동안 쿼리를 실행할 수 없습니다." 오류가 발생합니다.

문제의 근본

메모리 사용을 최적화하기 위해 MySQL 클라이언트 라이브러리는 일반적으로 초기 쿼리의 모든 결과를 내부적으로 검색하여 서버 커서를 순차적으로 가져오고 해제할 수 있습니다. 그러나 쿼리가 완전히 가져오지 않으면 MySQL 서버가 "활성 커서" 상태를 유지하기 때문에 후속 쿼리에서 오류가 발생합니다.

PDO::ATTR_EMULATE_PREPARES의 영향

설정 PDO::ATTR_EMULATE_PREPARES를 false로 설정하면 자동 쿼리 버퍼링이 비활성화됩니다. 즉, 가져온 결과는 MySQL 서버를 직접 사용합니다. 결과적으로 초기 쿼리에서 가져오지 않은 결과가 지속되면 앞서 언급한 오류가 발생할 수 있습니다.

오류 해결 방법

  • PDOStatement 사용: :fetchAll(): 이 메서드는 모든 쿼리 결과를 한 번에 검색하여 서버 커서를 해제하고 후속 쿼리를 활성화합니다. exexec.
  • 버퍼 쿼리 활성화: PDO::MYSQL_ATTR_USE_BUFFERED_QUERY를 사용하면 서버가 쿼리를 버퍼링하여 클라이언트 측 작업을 숨기고 오류를 방지하도록 설정됩니다.
  • 커서 닫기: 다음을 사용하여 수동으로 커서를 닫습니다. PDOStatement::closeCursor()도 문제를 완화할 수 있습니다.
  • 데이터 전체 가져오기: 새 쿼리를 시작하기 전에 초기 쿼리의 모든 데이터가 검색되었는지 확인하세요.

추가 고려 사항

  • 다른 MySQL 클라이언트 라이브러리에 비해 이점을 제공하는 mysqlnd 라이브러리 사용을 고려해보세요.
  • 루프 내에서 두 번째 쿼리를 다시 실행하는 것은 비효율적입니다. 루프 앞에 두 번째 쿼리 결과를 저장하고 대신 사용하세요.
  • 준비된 문에 명명된 매개 변수를 사용하면 매개 변수 값 배열 전달을 단순화할 수 있습니다.

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

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