Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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);
}
?>