MySQL 오류 2014: \'버퍼링되지 않은 다른 쿼리가 활성화되어 있는 동안 쿼리를 실행할 수 없습니다\'가 나타나는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-21 07:10:13
원래의
188명이 탐색했습니다.

Why Am I Getting MySQL Error 2014:

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

버퍼링되지 않은 다른 쿼리가 아직 활성화되어 있는 동안 쿼리를 실행하려고 하면 MySQL 오류 2014가 발생합니다. 활동적인. 이는 PDO::ATTR_EMULATE_PREPARES가 false로 설정된 준비된 문을 사용할 때 발생할 수 있습니다.

설명

PDO::ATTR_EMULATE_PREPARES가 true인 경우 PDO는 준비된 문을 일반 SQL 쿼리로 변환하여 에뮬레이트합니다. 이는 서버가 각 데이터 행에 대해 한 번씩 쿼리를 실행하여 버퍼링되지 않은 쿼리가 동시에 실행될 수 있음을 의미합니다.

그러나 PDO::ATTR_EMULATE_PREPARES가 false인 경우 PDO는 준비된 명령문을 서버에 보냅니다. 커서를 열어 두십시오. 이렇게 하면 커서가 닫힐 때까지 다른 쿼리가 실행되지 않습니다.

해결책

이 오류에 대한 몇 가지 해결 방법이 있습니다.

  • 버퍼 쿼리 활성화: PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 속성을 사용하여 버퍼링된 쿼리를 활성화할 수 있습니다. 이로 인해 PDO는 후속 쿼리를 실행하기 전에 쿼리의 모든 결과를 메모리로 가져옵니다.
  • **fetchAll() 사용: 준비된 명령문에서 fetchAll()을 호출하면 커서가 닫히고 다른 쿼리가 실행될 수 있습니다. .
  • 커서 닫기: closeCursor() 메서드를 사용하여 준비된 명령문에서 커서를 명시적으로 닫을 수 있습니다.

추가 고려 사항

제공된 코드 조각에는 $stmt2 쿼리가 루프 내에서 여러 번 실행되는 문제가 있습니다. 이는 불필요하며 성능 향상을 위해 루프 외부로 이동할 수 있습니다.

위치 매개변수(배열이 있는 PDO::execute()) 대신 명명된 매개변수(PDO::bindParam())를 사용하는 것이 좋습니다. 준비된 진술을 위해. 이렇게 하면 코드의 가독성이 높아지고 SQL 삽입 위험이 줄어듭니다.

결론

MySQL 오류 2014는 버퍼링되지 않은 쿼리를 제대로 처리하지 못하여 발생할 수 있습니다. 버퍼링된 쿼리를 사용하거나 fetchAll()을 호출하거나 커서를 닫으면 이 오류를 피할 수 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿