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.
SQL Server için PHP için Microsoft Sürücüleri'nde bağlantı havuzu oluşturma konusunda aşağıdaki noktalar önemlidir:
SQL Server için PHP için Microsoft Sürücüleri ODBC bağlantı havuzu kullanır.
Varsayılan olarak, bağlantı havuzu Windows'ta etkindir. Linux ve macOS'ta bağlantılar yalnızca ODBC için bağlantı havuzu etkinleştirilmişse havuza alınır (bkz. Bağlantı havuzunu etkinleştirme veya devre dışı bırakma). Bağlantı havuzu etkinleştirildiğinde ve bir sunucuya bağlandığınızda, sürücü yeni bir bağlantı oluşturmadan önce havuza alınan bir bağlantı kullanmayı dener. Havuzda eşdeğer bir bağlantı bulunmazsa yeni bir bağlantı oluşturulur ve havuza eklenir. Sürücü, bağlantı dizelerinin karşılaştırması temelinde bağlantıların eşdeğer olup olmadığını belirler.
Havuzdan bir bağlantı kullanıldığında, bağlantı durumu sıfırlanır (yalnızca Windows).
Bağlantı kapatılınca bağlantı havuza geri döndürülür.
Bağlantı havuzu hakkında daha fazla bilgi için Driver Manager Bağlantı Havuzu'na bakın.
Bağlantı havuzunu etkinleştirme/devre dışı bırakma
Windows
Bağlantı dizesindeki ConnectionPooling özniteliğinin değerini false (veya 0) olarak ayarlayarak sürücüyü yeni bir bağlantı oluşturmaya zorlayabilirsiniz (bağlantı havuzunda eşdeğer bir bağlantı aramak yerine).
ConnectionPooling özniteliği bağlantı dizesi atlanırsa veya true (veya 1) olarak ayarlandıysa, sürücü yalnızca bağlantı havuzunda eşdeğer bir bağlantı yoksa yeni bir bağlantı oluşturur.
Uyarı
Birden çok Etkin Sonuç Kümesi (MARS) varsayılan olarak etkindir. Hem MARS hem de havuz kullanımda olduğunda, MARS'ın düzgün çalışması için sürücünün ilk sorgudaki bağlantıyı sıfırlaması için daha uzun bir süre gerekir, bu nedenle belirtilen sorgu zaman aşımı yoksayılır. Ancak, sorgu zaman aşımı ayarı sonraki sorgularda etkili olur.
Gerekirse Nasıl Yapılır: Birden Çok Etkin Sonuç Kümesini (MARS) Devre Dışı Bırakma bölümüne bakın. Diğer bağlantı öznitelikleri hakkında bilgi için bkz. Bağlantı Seçenekleri.
Linux ve macOS
ConnectionPooling özniteliği, bağlantı havuzunu etkinleştirmek veya devre dışı bırakmak için kullanılamaz.
odbcinst.ini yapılandırma dosyası düzenlenerek bağlantı havuzu etkinleştirilebilir veya devre dışı bırakılabilir. Değişikliklerin geçerli olması için sürücü yeniden yüklenmelidir.
odbcinst.ini dosyasında Pooling ve pozitif bir Yes değerini CPTimeout olarak ayarlamak, bağlantı havuzlamayı etkinleştirir.
[ODBC]
Pooling=Yes
[ODBC Driver 17 for SQL Server]
CPTimeout=<int value>
En azından odbcinst.ini dosyası aşağıdaki örneğe benzer olmalıdır:
[ODBC]
Pooling=Yes
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1
UsageCount=1
CPTimeout=120
odbcinst.ini dosyasında Pooling ayarını No olarak ayarlamak, sürücüyü yeni bir bağlantı oluşturmaya zorlar.
[ODBC]
Pooling=No
Açıklamalar
Linux veya macOS'ta unixODBC < 2.3.7 ile bağlantı havuzu kullanılması önerilmez. odbcinst.ini dosyasında havuz oluşturma etkinse tüm bağlantılar havuza alınacaktır. Bu, ConnectionPooling bağlantı seçeneğinin hiçbir etkisi olmadığı anlamına gelir. Havuza alma özelliğini devre dışı bırakmak için odbcinst.ini dosyasında Pooling=Hayır'ı ayarlayın ve sürücüleri yeniden yükleyin.
- unixODBC <= 2.3.4 (Linux ve macOS), hata iletileri, uyarılar ve bilgilendirici iletiler gibi doğru tanılama bilgilerini döndürmeyebilir.
- Bu nedenle SQLSRV ve PDO_SQLSRV sürücüleri uzun verileri (xml, ikili gibi) dize olarak düzgün getiremeyebilir. Büyük boyutlu veriler geçici bir çözüm olarak akışlar halinde getirilebilir. AŞAĞıDAKI SQLSRV örneğine bakın.
Bağlantı havuzlaması sırasında
AccessTokenkullanılırken, sürücü, farklı erişim belirteçlerine sahip bağlantıların aynı havuza alınmamasını sağlamak için bağlantı anahtar kelimesine belirteç içeriğinin özetini ekler. Bu, tek bir kimlik olarak kimlik doğrulaması yapılan bir havuz bağlantısının, başka bir kimlik için yanlışlıkla yeniden kullanılabilmesi sonucu oluşabilecek kimlik çapraz kirlenmesini önler. ODBC sürücüsünün işaretçi kararlılığını sağlamak için token verileri TTL tabanlı sona erme ile önbelleğe alınır. Bu davranış 5.13.1 sürümünde kullanıma sunulmuştur.
<?php
$connectionInfo = array("Database"=>"test", "UID"=>"username", "PWD"=>"password");
$conn1 = sqlsrv_connect("servername", $connectionInfo);
$longSample = str_repeat("a", 8500);
$xml1 =
'<ParentXMLTag>
<ChildTag01>'.$longSample.'</ChildTag01>
</ParentXMLTag>';
// Create table and insert xml string into it
sqlsrv_query($conn1, "CREATE TABLE xml_table (field xml)");
sqlsrv_query($conn1, "INSERT into xml_table values ('$xml1')");
// retrieve the inserted xml
$column1 = getColumn($conn1);
// return the connection to the pool
sqlsrv_close($conn1);
// This connection is from the pool
$conn2 = sqlsrv_connect("servername", $connectionInfo);
$column2 = getColumn($conn2);
sqlsrv_query($conn2, "DROP TABLE xml_table");
sqlsrv_close($conn2);
function getColumn($conn)
{
$tsql = "SELECT * from xml_table";
$stmt = sqlsrv_query($conn, $tsql);
sqlsrv_fetch($stmt);
// This might fail in Linux and macOS
// $column = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
// The workaround is to fetch it as a stream
$column = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR));
sqlsrv_free_stmt($stmt);
return ($column);
}
?>