Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Verileri Güncelleştirme (SQL Server için PHP için Microsoft Sürücüleri)