Megosztás:


Kapcsolatkészletezés (Microsoft Drivers for PHP for SQL Server)

PHP-illesztőprogram letöltése

Az alábbi fontos szempontokat érdemes figyelembe venni az SQL Serverhez készült MICROSOFT Drivers for PHP-ben történő kapcsolatkészletezéssel kapcsolatban:

  • A Microsoft ODBC illesztőprogramok PHP-hez az SQL Serverhez ODBC kapcsolatkészletezést használnak.

  • Alapértelmezés szerint a kapcsolatkészletezés engedélyezve van a Windowsban. Linux és macOS rendszerben a kapcsolatok csak akkor vannak készletben, ha engedélyezve van a kapcsolatkészletezés az ODBC-ben (lásd: Kapcsolatkészletezés engedélyezése/letiltása). Ha engedélyezve van a kapcsolatkészletezés, és csatlakozik egy kiszolgálóhoz, az illesztőprogram egy készletezett kapcsolatot próbál használni, mielőtt újat hoz létre. Ha nem található egyenértékű kapcsolat a készletben, új kapcsolat jön létre, és hozzáadódik a készlethez. Az illesztőprogram a kapcsolati sztringek összehasonlítása alapján határozza meg, hogy a kapcsolatok egyenértékűek-e.

  • Ha a készletből származó kapcsolatot használ, a kapcsolat állapota alaphelyzetbe áll (csak Windows esetén).

  • A kapcsolat bezárása visszaadja a kapcsolatot a poolhoz.

A kapcsolatkészletezéssel kapcsolatos további információkért lásd: Driver Manager-kapcsolatkészletezés.

Kapcsolatkészletezés engedélyezése/letiltása

Windows

Kényszerítheti az illesztőprogramot, hogy új kapcsolatot létesítsen (ahelyett, hogy ezzel egyenértékű kapcsolatot keresne a kapcsolatkészletben), ha a kapcsolati sztringben a ConnectionPooling attribútum értékét hamisra (vagy 0-ra) állítja.

Ha a ConnectionPooling attribútum hiányzik a kapcsolati sztringből, vagy igaz (vagy 1) értékre van állítva, az illesztő csak akkor hoz létre új kapcsolatot, ha a kapcsolatkészletben nem létezik ezzel egyenértékű kapcsolat.

Megjegyzés:

Alapértelmezés szerint több aktív eredményhalmaz (MARS) van engedélyezve. Ha a MARS és a készletezés is használatban van, ahhoz, hogy a MARS megfelelően működjön, az illesztőnek hosszabb időre van szüksége a kapcsolat alaphelyzetbe állításához az első lekérdezésen, így figyelmen kívül hagyva a megadott lekérdezési időtúllépést. A lekérdezés időtúllépési beállítása azonban a későbbi lekérdezésekben érvénybe lép.

Ha szükséges, kérjük, ellenőrizze hogyan tiltható le a több aktív eredményhalmaz (MARS). Az egyéb kapcsolati attribútumokról további információt a Kapcsolat beállításai című témakörben talál.

Linux és macOS

A ConnectionPooling attribútum nem használható a kapcsolatkészletezés engedélyezésére/letiltására.

A kapcsolatkészletezés a odbcinst.ini konfigurációs fájl szerkesztésével engedélyezhető/letiltható. Az illesztőprogramot újra kell tölteni a módosítások érvénybe lépéséhez.

Az odbcinst.ini fájlban a Pooling beállítása Yes és egy pozitív CPTimeout érték lehetővé teszi a kapcsolatkészletezést.

[ODBC]
Pooling=Yes

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

A odbcinst.ini fájlnak minimálisan az alábbi példához hasonlóan kell kinéznie:

[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

Az odbcinst.ini fájlban Pooling beállítása No-re kényszeríti az illesztőprogramot egy új kapcsolat létrehozására.

[ODBC]
Pooling=No

Megjegyzések

  • Linux vagy macOS rendszerben a kapcsolatkészletezés nem ajánlott az unixODBC < 2.3.7 verziójánál. Minden kapcsolat össze lesz állítva, ha a készletezés engedélyezve van a odbcinst.ini fájlban, ami azt jelenti, hogy a ConnectionPooling kapcsolatbeállításnak nincs hatása. A készletezés letiltásához állítsa be a Pooling=No értéket a odbcinst.ini fájlban, és töltse be újra az illesztőprogramokat.
    • unixODBC <= 2.3.4 (Linux és macOS) előfordulhat, hogy nem ad vissza megfelelő diagnosztikai információkat, például hibaüzeneteket, figyelmeztetéseket és tájékoztató üzeneteket
    • Ezért előfordulhat, hogy az SQLSRV és PDO_SQLSRV illesztőprogramok nem tudják megfelelően beolvasni a hosszú adatokat (például xml, bináris) sztringekként. A hosszú adatok áthidaló megoldásként streamként is lekérhetők. Az SQLSRV-hez lásd az alábbi példát.
<?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);
}
?>

Lásd még:

Útmutató: Csatlakozás Windows-hitelesítéssel

Útmutató: Csatlakozás SQL Server-hitelesítéssel