Bagikan melalui


Pengumpulan Koneksi (Driver Microsoft untuk PHP untuk SQL Server)

Unduh driver PHP

Berikut ini adalah poin penting yang perlu diperhatikan tentang pengumpulan koneksi di Microsoft Drivers untuk PHP untuk SQL Server:

  • Driver Microsoft untuk PHP untuk SQL Server menggunakan pengumpulan koneksi ODBC.

  • Secara default, pengumpulan koneksi diaktifkan di Windows. Di Linux dan macOS, koneksi dikumpulkan hanya jika pengumpulan koneksi diaktifkan untuk ODBC (lihat Mengaktifkan/Menonaktifkan pengumpulan koneksi). Ketika pengumpulan koneksi diaktifkan dan Anda tersambung ke server, driver mencoba menggunakan koneksi terkumpul sebelum membuat yang baru. Jika koneksi yang setara tidak ditemukan di kumpulan, koneksi baru dibuat dan ditambahkan ke kumpulan. Driver menentukan apakah koneksi setara berdasarkan perbandingan string koneksi.

  • Ketika koneksi dari kumpulan digunakan, status koneksi diatur ulang (hanya Windows).

  • Menutup koneksi mengembalikan koneksi ke kumpulan.

Untuk informasi selengkapnya tentang pengumpulan koneksi, lihat Pengumpulan Koneksi Manajer Driver.

Mengaktifkan/Menonaktifkan pengumpulan koneksi

Windows

Anda dapat memaksa driver untuk membuat koneksi baru (alih-alih mencari koneksi yang setara di kumpulan koneksi) dengan mengatur nilai atribut ConnectionPooling di string koneksi ke false (atau 0).

Jika atribut ConnectionPooling dihilangkan dari string koneksi atau jika diatur ke true (atau 1), driver hanya membuat koneksi baru jika koneksi yang setara tidak ada di kumpulan koneksi.

Catatan

Beberapa Set Hasil Aktif (MARS) diaktifkan secara default. Ketika MARS dan pengumpulan sedang digunakan, agar MARS berfungsi dengan benar, driver memerlukan waktu yang lebih lama untuk mengatur ulang koneksi pada kueri pertama , sehingga mengabaikan batas waktu kueri yang ditentukan. Namun, pengaturan batas waktu kueri akan berlaku dalam kueri berikutnya.

Jika perlu, silakan periksa Cara: Menonaktifkan Beberapa Hasil Aktif (MARS). Untuk informasi tentang atribut koneksi lainnya, lihat Opsi Koneksi.

Linux dan macOS

Atribut ConnectionPooling tidak dapat digunakan untuk mengaktifkan/menonaktifkan pengumpulan koneksi.

Pengumpulan koneksi dapat diaktifkan/dinonaktifkan dengan mengedit file konfigurasi odbcinst.ini. Driver harus dimuat ulang agar perubahan diterapkan.

Mengatur Pooling ke Yes dan nilai positif CPTimeout dalam file odbcinst.ini memungkinkan pengumpulan koneksi.

[ODBC]
Pooling=Yes

[ODBC Driver 17 for SQL Server]
CPTimeout=<int value>

Minimal, file odbcinst.ini akan terlihat seperti contoh ini:

[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

Pengaturan Pooling ke No dalam file odbcinst.ini memaksa driver untuk membuat koneksi baru.

[ODBC]
Pooling=No

Keterangan

  • Di Linux atau macOS, pengumpulan koneksi tidak disarankan dengan unixODBC < 2.3.7. Semua koneksi akan dikumpulkan jika pengumpulan diaktifkan dalam file odbcinst.ini, yang berarti opsi koneksi ConnectionPooling tidak berpengaruh. Untuk menonaktifkan pengumpulan, atur Pooling=Tidak di file odbcinst.ini dan muat ulang driver.
    • unixODBC <= 2.3.4 (Linux dan macOS) mungkin tidak mengembalikan informasi diagnostik yang tepat, seperti pesan kesalahan, peringatan, dan pesan informatif
    • karena alasan ini, driver SQLSRV dan PDO_SQLSRV mungkin tidak dapat mengambil data panjang dengan benar (seperti xml, biner) sebagai string. Data panjang dapat diambil sebagai aliran sebagai solusinya. Lihat contoh di bawah ini untuk SQLSRV.
<?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);
}
?>

Lihat Juga

Cara: Menyambungkan Menggunakan Autentikasi Windows

Cara: Menyambungkan Menggunakan Autentikasi SQL Server