Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I det här avsnittet beskrivs användningen av attributet PDO::SQLSRV_ATTR_DIRECT_QUERY för att ange direktkörning av uttryck istället för standardvärdet, som är förberedd körning av uttryck. Om du använder en förberedd instruktion kan det resultera i bättre prestanda om -instruktionen körs mer än en gång med hjälp av parameterbindning.
Anmärkningar
Om du vill skicka en Transact-SQL-instruktion direkt till servern utan förberedelse av instruktionen av drivrutinen kan du ange attributet PDO::SQLSRV_ATTR_DIRECT_QUERY med PDO::setAttribute (eller som ett drivrutinsalternativ som skickas till PDO::__construct) eller när du anropar PDO::p repare. Som standard är värdet för PDO::SQLSRV_ATTR_DIRECT_QUERY Falskt (använd förberedd instruktionskörning).
Om du använder PDO::query kanske du vill ha direkt körning. Innan du anropar PDO::query anropar du PDO::setAttribute och anger PDO::SQLSRV_ATTR_DIRECT_QUERY till Sant. Varje anrop till PDO::query kan köras med en annan inställning för PDO::SQLSRV_ATTR_DIRECT_QUERY.
Om du använder PDO::prepare och PDOStatement::execute för att köra en fråga flera gånger med hjälp av bundna parametrar, optimerar körningen av förberedda instruktioner körningen av den upprepade frågan. I det här fallet anropar du PDO::prepare med PDO::SQLSRV_ATTR_DIRECT_QUERY inställd på False i drivrutinsalternativens matrisparameter. Vid behov kan du köra förberedda instruktioner med PDO::SQLSRV_ATTR_DIRECT_QUERY inställt på False.
När du anropar PDO::prepare kan inte värdet för PDO::SQLSRV_ATTR_DIRECT_QUERY ändras när du genomför den förberedda frågan.
Om en fråga kräver det sammanhang som angavs i en tidigare fråga, kör dina frågor med PDO::SQLSRV_ATTR_DIRECT_QUERY inställd på true. Om du till exempel använder tillfälliga tabeller i dina frågor måste PDO::SQLSRV_ATTR_DIRECT_QUERY anges till Sant.
Följande exempel visar att när kontext från en tidigare instruktion krävs måste du ange PDO::SQLSRV_ATTR_DIRECT_QUERY till True. Det här exemplet använder tillfälliga tabeller, som endast är tillgängliga för efterföljande instruktioner i programmet när frågor körs direkt.
Anmärkning
Om frågan ska anropa en lagrad procedur och temporära tabeller används i den här lagrade proceduren använder du PDO::exec i stället.
<?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");
?>
Se även
Programmeringsguide för Microsoft-drivrutiner för PHP för SQL Server