source

PDO 준비 스테이트먼트에서 쿼리를 되돌리기

factcode 2022. 11. 16. 21:24
반응형

PDO 준비 스테이트먼트에서 쿼리를 되돌리기

PDO Prepared 문 개체를 생성하는 데 사용된 쿼리를 가져올 수 있는 방법이 있습니까?

$statement->queryString을 사용해 보십시오.

원하는 것을 실현하는 가장 간단한 방법은 다음과 같습니다.

$statement->debugDumpParams();

스테이트먼트를 실행한 후에 반드시 추가해 주세요.

기본 \PDO 및 \PDOStatement 개체를 확장하는 데 반대하지 않는 경우 다음 사항을 검토할 수 있습니다.

github.com/noahheck/E_PDOStatement

PDO로 확장하면 데이터베이스 수준에서 실행될 수 있는 작업의 예로 전체 쿼리 문을 볼 수 있습니다.PDO 문의 경계 파라미터를 보간하기 위해 regex를 사용합니다.

기본 \PDOStatement 정의를 확장함으로써 E_PDOStatement는 일반 워크플로우 변경 없이 기본 기능을 확장할 수 있습니다.

면책사항:이 확장자를 만들었습니다.

그게 다른 사람에게 도움이 됐으면 좋겠어요.

이 순서는 유효합니다.debug Dump Params()는 출력을 반환하지 않기 때문입니다.여기 내가 고안한 작은 속임수가 있다.

// get the output before debugDumpParams() get executed 
$before = ob_get_contents();

//start a new buffer
ob_start();

// dump params now
$smt->debugDumpParams();

// save the output in a new variable $data
$data = ob_get_contents();

// clean the output screen
ob_end_clean();

// display what was before debugDumpParams() got executed
printf("%s", $before);

$statement = "";

// Now for prepared statements
if (stristr($data, 'Sent SQL') !== false)
{

// begin extracting from "Sent SQL"
$begin = stristr($data, 'Sent SQL');

// get the first ] square bracket
$square = strpos($begin, "]");

// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");

$sql = substr($begin, 0, $ending);
$sql = trim($sql);

  // sql statement here
  $statement = $sql;
}
else
{
  if (stristr($data, 'SQL') !== false)
  {
     $begin = stristr($data, 'SQL');
     // get the first ] square bracket
     $square = strpos($begin, "]");

     // collect sql
     $begin = substr($begin, $square + 1);
     $ending = strpos($begin, "Params");

     $sql = substr($begin, 0, $ending);
     $sql = trim($sql);

     $statement = $sql;
  }

}


// statement here
echo $statement;

이게 도움이 됐으면 좋겠다.

언급URL : https://stackoverflow.com/questions/2243177/get-query-back-from-pdo-prepared-statement

반응형