>  기사  >  백엔드 개발  >  PDO와 동시에 쿼리를 실행할 때 MySQL 오류 2014가 발생하는 이유는 무엇입니까?

PDO와 동시에 쿼리를 실행할 때 MySQL 오류 2014가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-19 01:23:021033검색

Why Does MySQL Error 2014 Occur When Executing Queries Concurrently with PDO?

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

소개

이 오류는 여러 쿼리를 동시에 실행하려고 할 때 발생합니다. PDO::ATTR_EMULATE_PREPARES가 false로 설정된 PDO를 사용하는 동안. 이는 버퍼링되지 않은 이전 쿼리가 모두 검색될 때까지 MySQL 서버가 추가 쿼리 실행을 처리할 수 없음을 나타냅니다.

오류 이유

PDO의 기본 동작은 준비된 문을 버퍼링되지 않은 쿼리로 변환하여 에뮬레이션하는 것입니다. . 버퍼링되지 않은 쿼리는 즉시 실행되며 결과는 클라이언트 측에 저장되지 않습니다. 이를 통해 대규모 결과 세트를 메모리 효율적으로 처리할 수 있습니다.

그러나 이 모드에서 작동할 때 MySQL은 버퍼링되지 않은 쿼리가 계속 진행되는 동안 후속 쿼리를 실행하지 못하게 하는 제한 사항을 적용합니다. 여기서 2014 오류가 발생합니다.

해결 방법

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

  1. 버퍼 쿼리 활성화: PDO에서 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY를 true로 설정할 수 있습니다. 객체의 연결 매개변수. 이는 클라이언트 측에 결과를 저장하고 동시 쿼리 실행을 허용하는 버퍼링된 쿼리를 사용하도록 PDO에 지시합니다.
  2. fetchAll() 또는 closeCursor()를 사용하세요. 버퍼링되지 않은 각 쿼리 실행 후, PDOStatement::fetchAll()을 사용하면 모든 결과를 한 번에 검색할 수 있습니다. 또는 closeCursor()를 호출하면 버퍼링되지 않은 쿼리와 관련된 서버 리소스가 해제되어 후속 쿼리가 실행될 수 있습니다.
  3. mysqlnd로 전환: mysqlnd 라이브러리는 MySQL을 위한 더욱 발전되고 효율적인 드라이버를 제공합니다. . 버퍼링되지 않은 쿼리와 버퍼링된 쿼리를 모두 지원하고 동시 쿼리 실행을 보다 효과적으로 처리합니다.

권장 모범 사례

최적의 성능과 효율성을 위해 대규모 결과 집합을 처리할 때 버퍼링된 쿼리를 사용하는 것이 좋습니다. 또는 동시성이 중요한 경우. 서버 리소스를 해제하려면 버퍼링되지 않은 각 쿼리 실행 후에 FetchAll() 또는 closeCursor()를 사용해야 합니다. 또한 향상된 MySQL 연결성과 성능을 위해 mysqlnd를 사용하는 것이 좋습니다.

위 내용은 PDO와 동시에 쿼리를 실행할 때 MySQL 오류 2014가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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