2015-12-20 17 views
32

Sì, so che PHP 7.0 ha rimosso le estensioni necessarie per connettersi a MSSQL. FreeTDS era la mia opzione precedente a PHP 7.0, ma ora non esiste un evidente percorso di aggiornamento per coloro che devono ancora connettersi a MSSQL.Linux - PHP 7.0 e MSSQL (Microsoft SQL)

Stupida domanda, ma dato che MSSQL è sicuramente usato in ambienti aziendali, come dovremmo connetterci a quei database che iniziano con PHP 7.0?

Sto trascurando qualcosa di palesemente ovvio o il rilascio di PHP 7 fondamentalmente ha dato uno schiaffo in faccia a chiunque abbia bisogno di connettersi a MSSQL?

Per chiarezza, io sono NON parlando di collegamento da un server Windows in esecuzione PHP, Sto dovendo collegarsi a MSSQL da un server Linux, e quindi avrebbe bisogno di un driver Linux ODBC.

Qualcuno fa una cosa che funziona con MSSQL 2012 e PHP 7.0 che può essere avuto liberamente oa pagamento?

È strano per me che non ci siano molte informazioni su PHP 7 e MSSQL. Certo che PHP 7 è appena uscito dalla stampa, ma ci devono essere più negozi MSSQL (FWIW li usiamo entrambi).

+1

mssql insieme a molte altre estensioni vecchie e non supportate sono state votate fuori dagli sviluppatori. Dubito che torneranno presto. L'ultima versione di FreeTDS include il driver necessario (opzione UNIXODBC) per impostazione predefinita. In precedenza avresti dovuto compilarlo manualmente. – rjdown

+0

È possibile utilizzare ODBC? – Andrea

risposta

4

Sono assolutamente d'accordo con te. Lavoro principalmente con SQL Server al lavoro e non capisco perché non includano driver predefiniti per server SQL in PHP.

Per Linux, non sono troppo sicuro di quello che hai usato in precedenza, ma ho scoperto che il driver "dblib" è il miglior driver per connettersi ai server SQL.

Ma fondamentalmente per una macchina Linux è sufficiente eseguire questi pochi passi per installare un driver SQL Server.

apt-get install freetds-dev -y 
vim /etc/freetds.conf 

Quindi andare avanti e aggiungere le connessioni lì e riavviare apache e si dovrebbe essere a posto!

+1

Quindi FreeTDS funziona ancora con PHP 7.0? C'è un segreto per farlo funzionare perché ho già provato questo, ma forse ho fatto un singhiozzo da qualche parte. –

+0

Non sono troppo sicuro se funziona con PHP 7 come non ho ancora aggiornato. Ma sono abbastanza sicuro che funzionerà, come hai detto tu stesso, SQL Server è altamente preferito negli ambienti di lavoro. Puoi eseguire php -i | grep -i pdo nella tua finestra di linux e incolla l'output. – Jordan

+0

Qui si va @Jordan '/etc/php5/cli/conf.d/10-pdo.ini, /etc/php5/cli/conf.d/20-pdo_dblib.ini, /etc/php5/cli/conf.d/20-pdo_mysql.ini, /etc/php5/cli/conf.d/20-pdo_odbc.ini, DOP supporto DOP => Abilita driver PDO => DBLIB, mysql, odbc pdo_dblib DOP driver per FreeTDS/Sybase DB-lib => abilitato pdo_mysql DOP driver per MySQL => abilitato pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock =>/var/run/mysqld/mysqld. calzino PDO_ODBC Driver PDO per ODBC (unixODBC) => abilitato' –

5

estensione ufficiale MS ha ramo per PHP 7:

Ci sono ancora molte cose mancanti, alcuni contrassegnata come previsto (il supporto Linux è in mezzo a loro), tuttavia potrebbe essere un'altra soluzione in futuro.

EDIT (09-09-2016): C'erano già poche versioni di Linux pubblicate da marzo, con pacchetti e sorgenti specifici di CentOS/Ubuntu disponibili. Tieni presente che non sono ancora contrassegnati come pronti per la produzione.

+0

Modifica: 12/19, i driver di produzione pronti insieme al supporto PECL sono rilasciati: https://github.com/Microsoft/msphpsql/releases/tag/4.0.8-Linux –

17

Il sybase di PHP7 contiene il modulo pdo_dblib.

sudo apt install php7.0-sybase 
+0

Awsome ringraziamenti, tutto funzionava al 100% da cli , non solo da php installato questo e php è stato in grado di connettersi bene. – Louwki

+0

Grazie! sudo apt install php7.1-sybase ha fatto il lavoro per me. – nielsiano

0

ho modificato

yum install freetds-dev 
vim /etc/freetds.conf 

e modificare FreeTDS.conf, installa il modulo php mssql

yum install php-mssql.x86_64 
21

Microsoft ha driver Linux di PHP per SQL Server per PHP 7 e versioni successive su PECL. Questi sono pronti per la produzione. Per scaricarli, attenersi alla seguente procedura:

Ubuntu 16.04:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 
exit 
sudo apt-get update 
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools unixodbc-dev 
sudo pecl install sqlsrv 
sudo pecl install pdo_sqlsrv 
echo "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 
echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 

CentOS 7:

sudo su 
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo 
exit 
sudo yum update 
sudo ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel 
sudo yum groupinstall "Development Tools" 
sudo pecl install sqlsrv 
sudo pecl install pdo_sqlsrv 
echo "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 
echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 

Questo installerà i driver PHP SQL Server e registrarli nella cartella php.ini.

Verificare che funziona utilizzando il seguente esempio

<?php 
$serverName = "localhost"; 
$connectionOptions = array(
    "Database" => "SampleDB", 
    "Uid" => "sa", 
    "PWD" => "your_password" 
); 
//Establishes the connection 
$conn = sqlsrv_connect($serverName, $connectionOptions); 
if($conn) 
    echo "Connected!" 
?> 

Collegamenti per riferimento:

+0

Ho problemi con le ultime due righe del tuo script.Ottengo i seguenti errori: 'Avviso PHP: avvio PHP: impossibile caricare la libreria dinamica '/ usr/lib/php/20160303/sqlsrv' -/usr/lib/php/20160303/sqlsrv: impossibile aprire il file oggetto condiviso: No tale file o directory in Unknown on line 0 PHP Attenzione: avvio PHP: impossibile caricare la libreria dinamica '/ usr/lib/php/20160303/pdo_sqlsrv' -/usr/lib/php/20160303/pdo_sqlsrv: impossibile aprire il file oggetto condiviso: Nessun file o directory in Unknown sulla linea 0' Sto usando php7.1 quindi non sono sicuro che questo cambi molto su questo. – Blakethepatton

+0

Non dovrebbe. Pecl ha installato il file di lavoro sqlsrv per te? È probabile che il tuo file sqlsrv.so sia archiviato in una posizione diversa. Sarebbe bello sapere dove si trova la directory delle estensioni: '' 'pecl config-show''' –

+1

Questo ha funzionato per me. Sto usando laravel5.4 e ho collegato correttamente il database remoto MSSQL. Molte grazie. –

1

Come per la risposta precedente, i passaggi generano un oggetto condiviso (* .so) in modo che anche il file php.ini abbia bisogno dell'estensione del file.

echo "extension=sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 
echo "extension=pdo_sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` 
Problemi correlati