Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma popisuje použití atributu PDO::SQLSRV_ATTR_DIRECT_QUERY k určení přímého provádění příkazů místo výchozího režimu, kterým je spuštění připravených příkazů. Použití připraveného příkazu může vést k lepšímu výkonu, pokud se příkaz spustí více než jednou pomocí vazby parametru.
Poznámky
Pokud chcete odeslat příkaz Transact-SQL přímo na server bez přípravy příkazu ovladačem, můžete nastavit pdo::SQLSRV_ATTR_DIRECT_QUERY atribut pomocí pdO::setAttribute (nebo jako možnost ovladače předaného pdO::__construct) nebo při volání pdO::p repare. Ve výchozím nastavení je hodnota PDO::SQLSRV_ATTR_DIRECT_QUERY False (použijte připravené spuštění příkazu).
Pokud používáte PDO::query, můžete chtít přímé spuštění. Před voláním pdo::queryzavolejte PDO::setAttribute a nastavte PDO::SQLSRV_ATTR_DIRECT_QUERY na True. Každé volání pdo::query se dá spustit s jiným nastavením pro pdo::SQLSRV_ATTR_DIRECT_QUERY.
Pokud používáte PDO::prepare a PDOStatement::execute k provedení dotazu vícekrát pomocí parametrů s vazbou, spuštění připraveného příkazu optimalizuje provádění opakovaného příkazu. V této situaci volejte PDO::prepare s PDO::SQLSRV_ATTR_DIRECT_QUERY nastavený na hodnotu False v parametru pole s možnostmi ovladače. V případě potřeby můžete spouštět připravené příkazy s pdo::SQLSRV_ATTR_DIRECT_QUERY nastavenou na Hodnotu False.
Po volání PDO::prepare se hodnota PDO::SQLSRV_ATTR_DIRECT_QUERY nemůže změnit při provádění připraveného dotazu.
Pokud dotaz vyžaduje kontext nastavený v předchozím dotazu, spusťte své dotazy pomocí pdO::SQLSRV_ATTR_DIRECT_QUERY nastavenou na Hodnotu True. Pokud například v dotazech používáte dočasné tabulky, musí být PDO::SQLSRV_ATTR_DIRECT_QUERY nastaven na True.
Následující ukázka ukazuje, že pokud je požadován kontext z předchozího příkazu, musíte nastavit pdO::SQLSRV_ATTR_DIRECT_QUERY na Hodnotu True. Tato ukázka používá dočasné tabulky, které jsou k dispozici pouze pro následné příkazy v programu při přímém spuštění dotazů.
Poznámka:
Pokud dotaz vyvolá uloženou proceduru a dočasné tabulky se použijí v této uložené proceduře, použijte místo toho 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");
?>
Viz také
Průvodce programováním pro ovladače Microsoftu pro PHP pro SQL Server