Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os seguintes pontos são importantes sobre o pool de conexões no Microsoft Drivers para PHP para SQL Server:
Os Drivers da Microsoft para PHP para SQL Server utilizam pool de conexões ODBC.
Por padrão, o pool de conexões está habilitado no Windows. No Linux e no macOS, as conexões serão agrupadas somente se o pool de conexões estiver habilitado para ODBC (consulte Habilitar ou desabilitar o pool de conexões). Quando o pool de conexões estiver habilitado e você se conectar a um servidor, o driver tentará usar uma conexão do pool antes de criar uma nova. Se uma conexão equivalente não for encontrada no pool, uma nova conexão será criada e adicionada ao pool. O driver determina se as conexões são equivalentes com base em uma comparação de cadeias de conexão.
Quando uma conexão do pool é usada, o estado da conexão é redefinido (somente Windows).
O fechamento da conexão retorna a conexão ao pool.
Confira mais informações sobre o pool de conexões em Pool de Conexões do Gerenciador de Drivers.
Como habilitar/desabilitar o pool de conexões
Windows
Você pode forçar o driver a criar uma nova conexão (em vez de procurar uma conexão equivalente no pool de conexões), definindo o valor do atributo ConnectionPooling na cadeia de conexão como false (ou 0).
Se o atributo ConnectionPooling for omitido do cadeia de conexão ou se ele estiver definido como true (ou 1), o driver só criará uma nova conexão se uma conexão equivalente não existir no pool de conexões.
Observação
O MARS (conjunto de resultados ativos múltiplos) está habilitado por padrão. Quando o MARS e o pool estão em uso, para que o MARS funcione corretamente, o driver requer um tempo maior para redefinir a conexão na primeira consulta, ignorando assim qualquer tempo limite de consulta especificado. No entanto, a configuração de tempo limite da consulta entra em vigor em consultas subsequentes.
Se necessário, consulte Como Desabilitar MARS (Vários Conjuntos de Resultados Ativos). Para obter mais informações sobre outros atributos de conexão, consulte Connection Options.
Linux e macOS
O atributo ConnectionPooling não pode ser usado para habilitar ou desabilitar o pool de conexões.
O pool de conexões pode ser habilitado ou desabilitado editando o arquivo de configuração odbcinst.ini. O controlador deve ser recarregado para que as alterações entrem em vigor.
A configuração de Pooling como Yes e de um valor CPTimeout positivo no arquivo odbcinst.ini habilita o pool de conexões.
[ODBC]
Pooling=Yes
[ODBC Driver 17 for SQL Server]
CPTimeout=<int value>
No mínimo, o arquivo odbcinst.ini deve ser semelhante ao seguinte exemplo:
[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
Configurar Pooling como No no arquivo odbcinst.ini força o driver a criar uma conexão.
[ODBC]
Pooling=No
Comentários
No Linux ou macOS, não é recomendável usar o pool de conexões com unixODBC < 2.3.7. Todas as conexões serão agrupadas se o pooling estiver habilitado no arquivo odbcinst.ini, o que significa que a opção de conexão ConnectionPooling não terá efeito. Para desabilitar o pool, defina Pooling=No no arquivo odbcinst.ini e recarregue os drivers.
- unixODBC <= 2.3.4 (Linux e macOS) pode não retornar informações de diagnóstico adequadas, como mensagens de erro, avisos e mensagens informativas.
- Por esse motivo, os drivers SQLSRV e PDO_SQLSRV podem não ser capazes de buscar corretamente dados longos (como xml, binário) como cadeias de caracteres. Como uma solução alternativa, os dados longos podem ser obtidos como fluxos. Veja o exemplo a seguir para SQLSRV.
Ao usar
AccessTokencom pool de conexões, o driver acrescenta um hash do conteúdo do token ao parâmetro de conexãoAPPpara garantir que as conexões com tokens de acesso diferentes não sejam conciliadas. Isso impede a contaminação cruzada de identidade, em que uma conexão agrupada, autenticada como uma identidade, possa ser reutilizada para uma identidade diferente. Os dados do token são armazenados em cache com expiração baseada em TTL para garantir a estabilidade do ponteiro para o driver ODBC. Esse comportamento foi introduzido na versão 5.13.1.
<?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);
}
?>