Lançado Adianti Framework 7.6!
Clique aqui para saber mais
[AJUDA] Driver PDO sqlsrv não funciona com PHP7 Desenvolvi um sistema de apoio o Microsiga Protheus da TOTVS, a base de produção está rodando em um servidor com php 5.6. Seguindo as recomendações resolvi migrar para o php 7 mas agora o sistema não esta se comunicando com o banco de dados do Protheus que é o SQL Server. O sistema apresenta o erro: could not find driver File: \\lib\\adianti\\database\\TConnection.php : 98 ...
JD
[AJUDA] Driver PDO sqlsrv não funciona com PHP7  
Fechado
Desenvolvi um sistema de apoio o Microsiga Protheus da TOTVS, a base de produção está rodando em um servidor com php 5.6.
Seguindo as recomendações resolvi migrar para o php 7 mas agora o sistema não esta se comunicando com o banco de dados do Protheus que é o SQL Server.
O sistema apresenta o erro:

could not find driver
File: \\lib\\adianti\\database\\TConnection.php : 98
PDO->__construct(sqlsrv:Server=192.168.0.1;Database=DADOSADV,SA,*******)


Dei uma pesquisada e pelo que ví ainda não existe um driver PDO do sql server para o PHP7, até tentei usa a versão 5.6 do driver disponível no site da Microsoft mas não tive sucesso.
Alguém já passou por isso? se sim como conseguiu resolver?
Todos os testes que realizei com o PHP 7 foram positivos principalmente o desempenho ele chega a ser 200% mais rápido, o único problema esta sendo essa incompatibilidade do PDO com o SQL Server.
Por hora estou mantendo o ambiente de produção com o PHP 5.6.
Desde já agradeço.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (7)


FC

Parece que falta habilitar a extensão no php.ini
JD

A extensão está habilitada, o problema é que o php 7 não a reconhece, o driver sqlsrv so funciona até a versão 5.6 do PHP.
Uma alternativa seria usar ODBC mas nunca trabalhei com ODBC e ja ouvi falar que as transações com ODBC são mais lentas, ai não sei o que fazer.
Obrigado pelo retorno.
FC

Puxa que besteira tem cara da m$crosoft mesmo.
JD

Consegui resolver, apanhei um pouco pra criar uma fonte de dados ODBC no Linux mas funcionou kkk
Precisei adcionar um novo driver na classe TConnection.
A dirver ficou assim:
  1. <?php
  2. case 'mssql':
  3. if (OS == 'WIN') {
  4.            $conn = new PDO("sqlsrv:Server={$host};Database={$name}"$user$pass);
  5. } else {
  6.           $port $port $port '1433';
  7.           $conn = new PDO("dblib:host={$host}:{$port};dbname={$name}"$user$pass);
  8. }
  9. break;
  10. case 'mssqlodbc':
  11.          $conn = new PDO("odbc:Driver={SQL Server};Server={$host};Database={$name}; Uid={$user};Pwd={$pass};");
  12. break;
  13. ?>
JD

Realmente as consultas parecem demorar um pouco mais com ODBC mas como o PHP 7 roda mais rápido as rotinas ficou bem equilibrado.
PD

Não testei ainda pq uso Linux, mas:
https://github.com/Azure/msphpsql/tree/PHP-7.0
https://github.com/Azure/msphpsql/tree/PHP-7.0/binaries
MM

Jheferson, qual é o seu ambiente? Windows ou linux?