PDO 준비된 명령문에서 원시 SQL 쿼리 검색
준비된 명령문의 맥락에서 "원시 SQL 쿼리 문자열" 개념 간단하지 않습니다. 준비된 문에서 PDOStatement::execute()가 호출되면 실행되는 SQL 문은 준비된 문 자체와 다릅니다.
매개변수 값으로 보간된 최종 SQL 쿼리에 액세스하는 것은 간단한 프로세스가 아닙니다. 준비된 진술에 내재되어 있습니다. 매개변수는 클라이언트 측의 준비된 문과 통합되지 않으므로 PDO에 액세스할 수 없습니다.
prepare() 작업 중에 SQL 문이 데이터베이스 서버로 전송되고, 실행() 시 매개변수가 별도로 전송됩니다. )이 호출됩니다. MySQL은 실행() 다음에 포함된 값이 포함된 최종 SQL을 표시하는 일반 쿼리 로그를 유지 관리합니다. 그러나 이 로그는 PDO 외부에 있으며 "원시" 쿼리 문자열을 나타내지 않습니다.
한 가지 해결 방법은 PDO 속성 PDO::ATTR_EMULATE_PREPARES를 설정하는 것입니다. 이 모드에서 PDO는 SQL 쿼리를 실행하기 전에 매개변수를 SQL 쿼리에 삽입합니다. 그러나 이 방법은 준비된 문의 효율성을 떨어뜨립니다.
PDOStatement 개체의 $queryString 속성은 잠재적인 솔루션처럼 보일 수 있지만 개체 초기화 중에만 설정되며 매개변수 보간을 반영하지 않습니다. 재작성된 쿼리를 기능으로 노출하는 것이 도움이 되지만 PDO::ATTR_EMULATE_PREPARES를 사용하지 않는 한 여전히 요구 사항을 충족하지 못할 것입니다.
MySQL 서버의 일반 쿼리 로그를 활용하면 재작성된 쿼리를 기록할 때 해결 방법이 제공됩니다. 그럼에도 불구하고 이는 로깅 중에만 적용되며 쿼리 실행에는 적용되지 않습니다.
위 내용은 PDO 준비된 문에서 매개변수 보간된 최종 SQL 쿼리를 어떻게 검색할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!