Conectando-se a um servidor / banco de dados MSSQL com PHP no Ubuntu / Debian

Oi,

Recentemente, tive que me conectar a um servidor MSSQL usando PHP em uma caixa Debian (o banco de dados anterior estava em MySQL e queríamos migrar para MSSQL). O seguinte é como eu fiz isso:

Etapa 1
Em sua caixa Debian / Ubuntu, você precisará instalar php5-sybase (o conector Sybase fornece as bibliotecas necessárias para se conectar ao servidor MSSQL) e o software freetds (também unixodbc) – faça isso da seguinte maneira:

debian-7$ sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase

Depois de instalado, reinicie o Apache (presumo que você esteja usando o Apache como eu, se estiver usando outro servidor web – reinicie-o ou se quiser apenas para php-cli – então não há necessidade de reiniciar nada! )

debian-7$ sudo service apache2 restart

Agora você pode testar se pode se conectar ao servidor MSSQL da seguinte maneira – usando a tsqlferramenta de linha de comando:

debian-7$ tsql -H <hostname/ip_address> -p <port> -U <username> -P <password> -D <chosen_database>

Você deve receber uma mensagem semelhante a esta:

locale is "en_US.UTF-8"
locale charset
is "UTF-8"
using default charset "UTF-8"
Default database being set to <chosen_database>
1> quit

Se você obtiver algo semelhante ao que vê acima – você está no mercado e as coisas estão funcionando, agora você pode configurar seu /etc/freetds/freetds.confarquivo e quebrar seu código.

(Observe que eu só testei isso usando a autenticação de modo misto no servidor MSSQL e, portanto, não tenho certeza se isso funcionará usando a autenticação do Windows – duvido, mas não tenho certeza – se você tentou com a autenticação do Windows , informe a todos se funciona ou não e quais alterações (se houver) você teve que fazer). Também, naturalmente, o usuário com o qual você faz login precisa ter acesso ao seu <chosen_database> – mas eu teria pensado que isso fosse bastante óbvio!

Agora, para configurar seu arquivo, abra-o no editor de sua escolha, e você verá algum conteúdo pré-preenchido, na parte inferior deste, adicione uma linha que se pareça com o que coloquei abaixo:/etc/freetds/freetds.conf

[YOUR_SERVER_FRIENDLY_NAME]
host
= <hostname/ip_address>
port
= <port>
tds version
= 8.0

Agora você deve conseguir se conectar sem fornecer todos os nomes de host / portas e as informações sobre o servidor da seguinte maneira:

debian-7$ tsql -S <YOUR_SERVER_FRIENDLY_NAME> -U <username> -P <password> -D <chosen_database>

Isso deve fornecer uma saída semelhante à mostrada abaixo:

locale is "en_US.UTF-8"
locale charset
is "UTF-8"
using default charset "UTF-8"
Default database being set to <chosen_database>
1> quit

Se você conseguir isso, excelente, você está pronto para conectar seu código PHP:

Para fazer isso, basta dar uma olhada no código que colei abaixo (embora o ideal seja usar algum tipo de camada ORM para facilitar sua vida) – mas para fins de ilustração, o exemplo abaixo será suficiente:

$connection = mssql_connect('<YOUR_SERVER_FRIENDLY_NAME>', '<username>', '<password>');

if (!$connection) {
die('Unable to connect!');
}

if (!mssql_select_db('<chosen_database>', $connection)) {
die('Unable to select database!');
}

$result
= mssql_query('SELECT * FROM <some_table>');

while ($row = mssql_fetch_array($result)) {
var_dump
($row);
}

mssql_free_result
($result);

Quando você executa isso – por meio de um navegador ou linha de comando, você deve obter dados do seu <some_table>.

Espero que isso tenha ajudado alguém, divirta-se 🙂

Atenciosamente,

Shabbir