PDO_SQLSRV 드라이버에서 직접 문 실행 및 준비된 문 실행
이 항목에서는 PDO::SQLSRV_ATTR_DIRECT_QUERY 특성을 사용하여 기본값(준비된 명령문 실행) 대신 직접 명령문 실행을 지정하는 방법을 설명합니다. 매개 변수 바인딩을 사용하여 문이 두 번 이상 실행되는 경우 준비된 문을 사용하면 성능이 향상될 수 있습니다.
설명
드라이버를 사용하여 문을 준비하지 않고 서버에 직접 Transact-SQL 문을 보내려면 PDO::setAttribute에서(또는 PDO::__construct로 전달되는 드라이버 옵션으로) 또는 PDO::prepare를 호출할 때 PDO::SQLSRV_ATTR_DIRECT_QUERY 특성을 설정합니다. 기본적으로 PDO::SQLSRV_ATTR_DIRECT_QUERY의 값은 False입니다(준비된 문 실행 사용).
PDO::query를 사용하는 경우 직접 실행해야 할 수 있습니다. PDO::query를 호출하기 전에 PDO::setAttribute를 호출하고 PDO::SQLSRV_ATTR_DIRECT_QUERY를 True로 설정합니다. PDO::query를 호출할 때마다 PDO::SQLSRV_ATTR_DIRECT_QUERY에 대한 다른 설정으로 실행할 수 있습니다.
바인딩된 매개 변수를 사용하여 쿼리를 여러 번 실행하기 위해 PDO::prepare 및 PDOStatement::execute를 사용하는 경우, 준비된 문을 실행하면 반복되는 쿼리의 실행을 최적화할 수 있습니다. 이 경우 드라이버 옵션 배열 매개 변수에서 False로 설정된 PDO::SQLSRV_ATTR_DIRECT_QUERY를 사용하여 PDO::prepare를 호출합니다. 필요한 경우 PDO::SQLSRV_ATTR_DIRECT_QUERY를 False로 설정하여 준비된 문을 실행할 수 있습니다.
PDO::prepare를 호출한 후 준비된 쿼리를 실행할 때 PDO::SQLSRV_ATTR_DIRECT_QUERY의 값을 변경할 수 없습니다.
쿼리에 이전 쿼리에서 설정한 컨텍스트가 필요한 경우 PDO::SQLSRV_ATTR_DIRECT_QUERY를 True로 설정하여 쿼리를 실행합니다. 예를 들어, 쿼리에 임시 테이블을 사용하는 경우 PDO::SQLSRV_ATTR_DIRECT_QUERY를 True로 설정해야 합니다.
다음 샘플은 이전 문의 컨텍스트가 필요한 경우 PDO::SQLSRV_ATTR_DIRECT_QUERY를 True로 설정해야 함을 보여 줍니다. 이 샘플은 쿼리가 직접 실행될 때 프로그램의 후속 문에서만 사용할 수 있는 임시 테이블을 사용합니다.
참고 항목
쿼리가 저장 프로시저를 호출하고 이 저장 프로시저에서 임시 테이블을 사용하는 경우 PDO::exec를 대신 사용합니다.
<?php
$conn = new PDO('sqlsrv:Server=(local)', '', '');
$conn->setAttribute(constant('PDO::SQLSRV_ATTR_DIRECT_QUERY'), true);
$stmt1 = $conn->query("DROP TABLE #php_test_table");
$stmt2 = $conn->query("CREATE TABLE #php_test_table ([c1_int] int, [c2_int] int)");
$v1 = 1;
$v2 = 2;
$stmt3 = $conn->prepare("INSERT INTO #php_test_table (c1_int, c2_int) VALUES (:var1, :var2)");
if ($stmt3) {
$stmt3->bindValue(1, $v1);
$stmt3->bindValue(2, $v2);
if ($stmt3->execute())
echo "Execution succeeded\n";
else
echo "Execution failed\n";
}
else
var_dump($conn->errorInfo());
$stmt4 = $conn->query("DROP TABLE #php_test_table");
?>