Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico discute a utilização do atributo PDO::SQLSRV_ATTR_DIRECT_QUERY para especificar a execução direta da instrução em vez da predefinição, que é a execução da instrução preparada. Usar uma instrução preparada pode resultar em melhor desempenho se a instrução for executada mais do que uma vez usando ligação de parâmetros.
Observações
Se quiser enviar uma instrução Transact-SQL diretamente para o servidor sem preparação de instruções pelo driver, pode definir o atributo PDO::SQLSRV_ATTR_DIRECT_QUERY com PDO::setAttribute (ou como opção de driver passada para PDO::__construct) ou quando chamar PDO::prepare. Por defeito, o valor de PDO::SQLSRV_ATTR_DIRECT_QUERY é falso (use a execução de declarações preparadas).
Se usares PDO::query, talvez queiras execução direta. Antes de chamar PDO::query, chame PDO::setAttribute e defina PDO::SQLSRV_ATTR_DIRECT_QUERY para True. Cada chamada para PDO::query pode ser executada com uma definição diferente para PDO::SQLSRV_ATTR_DIRECT_QUERY.
Se usar PDO::prepare e PDOStatement::execute para executar uma consulta várias vezes usando parâmetros vinculados, a execução da consulta preparada otimiza a execução da consulta repetida. Nesta situação, chame PDO::prepare com PDO::SQLSRV_ATTR_DIRECT_QUERY definido para False no parâmetro do array de opções do controlador. Quando necessário, pode executar instruções preparadas com PDO::SQLSRV_ATTR_DIRECT_QUERY definido para Falso.
Depois de chamar PDO::prepare, o valor de PDO::SQLSRV_ATTR_DIRECT_QUERY não pode mudar ao executar a consulta preparada.
Se uma consulta requer o contexto definido numa consulta anterior, então execute as suas consultas com PDO::SQLSRV_ATTR_DIRECT_QUERY definido como True. Por exemplo, se usar tabelas temporárias nas suas consultas, o PDO::SQLSRV_ATTR_DIRECT_QUERY deve ser definido como Verdadeiro.
O exemplo seguinte mostra que, quando é necessário contexto de uma instrução anterior, é necessário definir PDO::SQLSRV_ATTR_DIRECT_QUERY para True. Este exemplo utiliza tabelas temporárias, que só estão disponíveis para instruções subsequentes no seu programa quando as consultas são executadas diretamente.
Observação
Se a consulta for invocar um procedimento armazenado e forem usadas tabelas temporárias neste procedimento armazenado, use PDO::exec em vez disso.
<?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");
?>
Ver também
Guia de Programação para os Microsoft Drivers for PHP para SQL Server