sqlsrv_prepare

PHP sürücüsünü indirme

Belirtilen bağlantıyla ilişkili bir ifade kaynağı oluşturur. Bu fonksiyon, birden fazla sorgu yürütmek için faydalıdır.

Syntax

  
sqlsrv_prepare(resource $conn, string $tsql [, array $params [, array $options]])  

Parameters

$conn: Oluşturulan ifadeyle ilişkili bağlantı kaynağı.

$tsql: Oluşturulan ifadeye karşılık gelen Transact-SQL ifade.

$params [ISTEĞE BAĞLI]: Parametrizlenmiş sorgudaki parametrelere karşılık gelen bir değer dizisi . Dizinin her elemanı aşağıdakilerden biri olabilir:

  • Kelimenin tam anlamıyla bir değer.

  • Bir PHP değişkenine referans.

  • Aşağıdaki yapıya sahip bir dizi :

    array(&$value [, $direction [, $phpType [, $sqlType]]])  
    

    Note

    Sorgu parametresi olarak iletilen değişkenler, değer yerine referans yoluyla iletmelidir. Örneğin, yerine geçin &$myVariable$myVariable. Değer parametrelerine sahip bir sorgu yürütüldüğünde bir PHP uyarısı yükselir.

    Aşağıdaki tablo bu dizi öğelerini tanımlar:

    Öğe Description
    &$value Bir literal değer veya bir PHP değişkenine referans.
    $direction[ISTEĞE BAĞLI] Parametre yönünü belirtmek için kullanılan aşağıdaki SQLSRV_PARAM_* sabitlerinden biri: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. Varsayılan değer SQLSRV_PARAM_IN.

    PHP sabitleri hakkında daha fazla bilgi için Constants (Microsoft Drivers for PHP for SQL Server) bölümüne bakınız.
    $phpType[ISTEĞE BAĞLI] Geri dönen değerin PHP veri tipini belirten bir SQLSRV_PHPTYPE_* saiti.
    $sqlType[ISTEĞE BAĞLI] Giriş değerinin SQL Server veri tipini belirten bir SQLSRV_SQLTYPE_* sabitidir.

$options [ISTEĞE BAĞLI]: Sorgu özelliklerini belirleyen ilişkilendirilebilir bir dizi. Aşağıdaki tablo desteklenen anahtarları ve karşılık gelen değerleri listeler:

Key Desteklenen değerler Description
ClientBufferMaxKBSize Pozitif bir tamsayı İstemci tarafı imleci için sonuç kümesini tutan tamponun boyutunu yapılandırır.

Varsayılan 10240 KB'dir. Daha fazla bilgi için Bir İmleç Tipi Belirleme ve Satır Seçme bölümlerini okuyun.
Ondalık Basamaklar 0 ile 4 arasında bir tam sayı (dahil) Getirilen para değerlerini biçimlendirirken ondalık basamakları belirtir.

4'ten büyük herhangi bir negatif tamsayı veya değer yoksayılır.

Bu seçenek yalnızca FormatDecimals doğru olduğunda çalışır.
FormatDecimals true veya false

Varsayılan değer yanlış değeridir.
Uygun olduğunda ondalık dizelere baştaki sıfırların eklenip eklenmeyeceğini DecimalPlaces belirtir ve para türlerini biçimlendirme seçeneğini etkinleştirir.

Daha fazla bilgi için Ondalık Diziler ve Para Değerleri Biçimlendirme (SQLSRV Sürücüsü) bölümüne bakınız.
QueryTimeout Pozitif bir tamsayı Sorgu süresini saniyeler olarak ayarlar. Varsayılan olarak, sürücü sonuçları süresiz olarak bekler.
TarihleriStringOlarakDöndür true veya false

Varsayılan değer yanlış değeridir.
Açıklamayı tarih ve zaman tiplerini dizide (doğru) olarak almak üzere yapılandırır. Daha fazla bilgi için Nasıl Yapılır: SQLSRV Sürücüsünü kullanarak Tarih ve Zaman Tiplerini Dizgi olarak Alın.
Kaydırılabilir SQLSRV_CURSOR_FORWARD

SQLSRV_CURSOR_STATIC

SQLSRV_CURSOR_DYNAMIC

SQLSRV_CURSOR_KEYSET

SQLSRV_CURSOR_CLIENT_BUFFERED
Bu değerler hakkında daha fazla bilgi için Bir İmleç Tipi Belirtme ve Satır Seçme bölümlerine bakınız.
SendStreamParamsAtExec true veya false

Varsayılan değer true değeridir.
Sürücüyü, tüm akış verilerini yürütme sırasında gönderecek şekilde (doğru) veya akış verisini parçalar halinde (yanlış) gönderecek şekilde yapılandırır. Varsayılan olarak, değer true olarak ayarlanır. Daha fazla bilgi için bkz. sqlsrv_send_stream_data.

Dönüş Değeri

Bir ifade kaynağı. Eğer ifade kaynağı oluşturulamazsa, false geri döner.

Remarks

Değişkenleri parametre olarak kullanan bir ifade hazırladığınızda, değişkenler ifadeye bağlıdır. Bu, değişkenlerin değerlerini güncellerseniz, bir dahaki ifadeyi yürüttüğünde güncellenmiş parametre değerleriyle çalışacağı anlamına gelir.

sqlsrv_prepare ve sqlsrv_execute kombinasyonu, ifade hazırlama ve ifade yürütmesini iki fonksiyon çağrısına ayırır ve parametrizlenmiş sorgular yürütmek için kullanılabilir. Bu fonksiyon, her uygulama için farklı parametre değerleriyle bir ifadeyi birden fazla kez çalıştırmak için idealdir.

Büyük miktarda bilgi yazma ve okumak için alternatif stratejiler için bkz. SQL Statement'ların Grupları ve BULK INSERT.

Daha fazla bilgi için bkz. Nasıl Alınır: SQLSRV Sürücüsü Kullanarak Çıkış Parametrelerini Alın.

Örnek 1

Aşağıdaki örnek bir ifadeyi hazırlayır ve çalıştırır. Bu ifade yürütüldüğünde ( bkz. sqlsrv_execute), AdventureWorks veritabanının Sales.SalesOrderDetail tablosunda bir alanı günceller. Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Örnek komut satırından çalıştırıldığında tüm çıkış konsola yazılır.

<?php  
/* Connect to the local server using Windows Authentication and  
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array("Database"=>"AdventureWorks");  
$conn = sqlsrv_connect($serverName, $connectionInfo);  
if ($conn === false) {  
    echo "Could not connect.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
/* Set up Transact-SQL query. */  
$tsql = "UPDATE Sales.SalesOrderDetail   
         SET OrderQty = ?   
         WHERE SalesOrderDetailID = ?";  
  
/* Assign parameter values. */  
$param1 = 5;  
$param2 = 10;  
$params = array(&$param1, &$param2);  
  
/* Prepare the statement. */  
if ($stmt = sqlsrv_prepare($conn, $tsql, $params)) {
    echo "Statement prepared.\n";  
} else {  
    echo "Statement could not be prepared.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
/* Execute the statement. */  
if (sqlsrv_execute($stmt)) {  
    echo "Statement executed.\n";  
} else {  
    echo "Statement could not be executed.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
/* Free the statement and connection resources. */  
sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn);  
?>  

Örnek 2

Aşağıdaki örnek, bir ilanı nasıl hazırlayıp farklı parametre değerleriyle yeniden çalıştırılacağını gösterir. Örnek, AdventureWorks veritabanındaki Sales.SalesOrderDetail tablosunun OrderQty sütununu güncelliyor. Güncellemeler gerçekleştikten sonra, veritabanı güncellemelerin başarılı olup olmadığını doğrulamak için sorgulanır. Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Örnek komut satırından çalıştırıldığında tüm çıkış konsola yazılır.

<?php  
/* Connect to the local server using Windows Authentication and  
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array("Database"=>"AdventureWorks");  
$conn = sqlsrv_connect($serverName, $connectionInfo);  
if ($conn === false) {  
     echo "Could not connect.\n";  
     die(print_r(sqlsrv_errors(), true));  
}  
  
/* Define the parameterized query. */  
$tsql = "UPDATE Sales.SalesOrderDetail  
         SET OrderQty = ?  
         WHERE SalesOrderDetailID = ?";  
  
/* Initialize parameters and prepare the statement. Variables $qty  
and $id are bound to the statement, $stmt1. */  
$qty = 0; $id = 0;  
$stmt1 = sqlsrv_prepare($conn, $tsql, array(&$qty, &$id));  
if ($stmt1) {  
    echo "Statement 1 prepared.\n";  
} else {  
    echo "Error in statement preparation.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
/* Set up the SalesOrderDetailID and OrderQty information. This array  
maps the order ID to order quantity in key=>value pairs. */  
$orders = array(1=>10, 2=>20, 3=>30);  
  
/* Execute the statement for each order. */  
foreach ($orders as $id => $qty) {  
    // Because $id and $qty are bound to $stmt1, their updated  
    // values are used with each execution of the statement.   
    if (sqlsrv_execute($stmt1) === false) {  
        echo "Error in statement execution.\n";  
        die(print_r(sqlsrv_errors(), true));  
    }  
}  
echo "Orders updated.\n";  
  
/* Free $stmt1 resources.  This allows $id and $qty to be bound to a different statement.*/  
sqlsrv_free_stmt($stmt1);  
  
/* Now verify that the results were successfully written by selecting   
the newly inserted rows. */  
$tsql = "SELECT OrderQty   
         FROM Sales.SalesOrderDetail   
         WHERE SalesOrderDetailID = ?";  
  
/* Prepare the statement. Variable $id is bound to $stmt2. */  
$stmt2 = sqlsrv_prepare($conn, $tsql, array(&$id));  
if ($stmt2) {  
    echo "Statement 2 prepared.\n";  
} else {  
    echo "Error in statement preparation.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
/* Execute the statement for each order. */  
foreach (array_keys($orders) as $id)  
{  
    /* Because $id is bound to $stmt2, its updated value   
    is used with each execution of the statement. */  
    if (sqlsrv_execute($stmt2)) {  
        sqlsrv_fetch($stmt2);  
        $quantity = sqlsrv_get_field($stmt2, 0);  
        echo "Order $id is for $quantity units.\n";  
    } else {  
        echo "Error in statement execution.\n";  
        die(print_r(sqlsrv_errors(), true));  
    }  
}  
  
/* Free $stmt2 and connection resources. */  
sqlsrv_free_stmt($stmt2);  
sqlsrv_close($conn);  
?>  

Note

PHP'nin kayan nokta sayıları için hassasiyet ve doğruluk sağlamak için değerleri ondalık veya sayısal sütuna bağlamak için giriş olarak dizide kullanılması önerilir. Aynı durum bigint sütunları için de geçerlidir, özellikle değerler tam sayı aralığı dışında olduğunda.

Örnek 3

Bu kod örneği, bir ondalık değeri giriş parametresi olarak nasıl bağlanacağını gösterir.

<?php
$serverName = "(local)";
$connectionInfo = array("Database"=>"YourTestDB");  
$conn = sqlsrv_connect($serverName, $connectionInfo);  
if ($conn === false) {  
    echo "Could not connect.\n";  
    die(print_r(sqlsrv_errors(), true));  
}  

// Assume TestTable exists with a decimal field 
$input = "9223372036854.80000";
$params = array($input);
$stmt = sqlsrv_prepare($conn, "INSERT INTO TestTable (DecimalCol) VALUES (?)", $params);
sqlsrv_execute($stmt);

sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn);  

?>

Ayrıca Bkz.

SQLSRV Sürücü API'si Başvurusu

Nasıl yapılır: Parametreli Sorgular Gerçekleştirme

Belgelerde Kod Örnekleri Hakkında

Nasıl yapılır: Akış Olarak Veri Gönderme

Yön Parametrelerini Kullanma

Veri Alınıyor

Verileri Güncelleştirme (SQL Server için PHP için Microsoft Sürücüleri)