it-swarm.com.de

Linux - PHP 7.0 und MSSQL (Microsoft SQL)

Ja, ich weiß, dass PHP 7.0 die für die Verbindung zu MSSQL erforderlichen Erweiterungen entfernt hat. FreeTDS war meine Option vor PHP 7.0, aber jetzt gibt es keinen offensichtlichen Upgrade-Pfad für alle, die noch eine Verbindung zu MSSQL herstellen müssen.

Dumme Frage, aber angesichts der Tatsache, dass MSSQL in Unternehmensumgebungen mit Sicherheit eingesetzt wird, wie sollen wir uns mit diesen Datenbanken verbinden, die mit PHP 7.0 beginnen?

Übersehe ich etwas offensichtlich offensichtliches oder hat die Veröffentlichung von PHP 7 im Grunde jedem, der eine Verbindung zu MSSQL herstellen muss, einen Schlag ins Gesicht gegeben?

Der Klarheit halber spreche ich vonNICHTüber das Herstellen einer Verbindung von einem Windows-Server, auf dem PHP ausgeführt wird. Ich muss eine Verbindung zu MSSQL von einem Linux-Server herstellen und würde daher einen Linux-Treiber ODBC benötigen.

Macht jemand so etwas, das mit MSSQL 2012 und PHP 7.0 funktioniert, das frei oder gegen Gebühr erhältlich ist?

Es ist seltsam für mich, dass es dort nicht viel PHP 7 und MSSQL-Informationen gibt. Zugegeben, dass PHP 7 frisch von der Druckmaschine ist, aber es muss mehr MSSQL-Shops geben (FWIW verwenden wir beide).

38
Donavon Yelton

Microsoft hat PHP Linux-Treiber für SQL Server für PHP 7 und höher in PECL. Diese sind serienreif. Um sie herunterzuladen, folgen Sie diesen Schritten:

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*||"`

Dadurch werden die PHP SQL Server-Treiber installiert und im Ordner "php.ini" registriert. 

Stellen Sie anhand des folgenden Beispiels sicher, dass es funktioniert

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

Links als Referenz:

30
meet-bhagdev

Die Sybase von PHP7 enthält das Modul pdo_dblib.

Sudo apt install php7.0-sybase
18
shrty

tldr; Die Erweiterungen von sqlsrv und pdo_sqlsrv php waren mit großen Abfragen mit vielen Parametern sehr langsam, aber die Installation und Verwendung von pdo-dblib löste das Problem für mich.

Läuft auf PHP-Framework Laravel 5.1 und 5.6 (auf PHP 7.1 und 7.2) auf Ubunutu 16.04. Ich habe festgestellt, dass die Pakete sqlsrv und pdo_sqlsrv bei großen Abfragen nicht gut funktionieren. Ich hatte eine große Abfrage mit 30 gebundenen Variablen. SQL Server 2008 konvertierte alle gebundenen Variablen in nvarchar (4000), wodurch die Datenbank viele Castings dauerte.

Dann deaktiviere ich die Erweiterungen sqlsrv.so und pdo_sqlsrv.so und installierte die Erweiterung pdo-dblib mit:

Sudo apt-get install php7.2-pdo-dblib

Dann wurde die Abfrage viel schneller verarbeitet.

Für mehr Informationen:

Unter der Haube verwendet Laravel eine PDOS-Einstellung wie folgt:

$conn = new PDO( "dblib:Host=$Host:1433;dbname=$db;", $uid, $pwd);
$stmt = $conn->prepare( $query );
$stmt->execute($param);

wo eine direkte abfrage gefällt 

$conn = new PDO( "dblib:Host=$Host:1433;dbname=$db;", $uid, $pwd);
$results = $conn->query( $query_with_parameter_already_bound );

würde gut funktionieren.

8
grizzb

Offizielle MS-Erweiterung hat einen Zweig für PHP 7:

Es fehlt noch einiges, einige sind als geplant markiert (Linux-Support ist darunter), es könnte jedoch in Zukunft eine andere Lösung sein.

EDIT (09-09-2016): Seit März wurden bereits einige Linux-Releases veröffentlicht, wobei CentOS/Ubuntu-spezifische Pakete und Quellen verfügbar waren. Denken Sie daran, dass sie noch nicht als "Produktionsbereit" gekennzeichnet sind.

5
bjauy

Ich stimme dir auf jeden Fall zu. Ich arbeite hauptsächlich mit SQL-Servern bei der Arbeit und verstehe nicht, warum sie keine Standardtreiber für SQL-Server in PHP enthalten.

Für Linux bin ich mir nicht sicher, was Sie zuvor verwendet haben, aber ich habe festgestellt, dass der "dblib" -Treiber der beste Treiber für die Verbindung zu SQL-Servern ist.

Aber im Grunde möchten Sie für eine Linux-Box nur diese wenigen Schritte ausführen, um einen SQL-Servertreiber zu installieren.

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

Dann fügen Sie Ihre Verbindungen dort hinzu und starten Sie Apache neu.

4
Jordan

Wie in der Antwort oben - Die Schritte geben ein Shared Object (* .so) aus, sodass die php.ini-Datei auch die Dateierweiterung benötigt. 

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*||"`
1
Joes5

Ich veränderte

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

Und ändern Sie freetds.conf, installieren Sie das php mssql-Modul

yum install php-mssql.x86_64
0
Caat c

Ein kurzer Dump für die Debian-Leute: 

# Install MSSQL Client for PHP7 on Debian 9
apt update && apt install curl apt-transport-https
curl https://packages.Microsoft.com/keys/Microsoft.asc | apt-key add -
curl https://packages.Microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt update
ACCEPT_EULA=Y apt install msodbcsql17 mssql-tools unixodbc-dev php-pear php7.0-dev
pecl install sqlsrv
pecl install pdo_sqlsrv
# if previous pecl cmds fails to download files at it's own - try the following ones:
#wget http://pecl.php.net/get/sqlsrv-5.2.0.tgz
#wget http://pecl.php.net/get/pdo_sqlsrv-5.2.0.tgz
#pecl install sqlsrv-5.2.0.tgz
#pecl install pdo_sqlsrv-5.2.0.tgz

cat <<EOF > /etc/php/7.0/cli/conf.d/99-sqlsrv.ini  
extension=sqlsrv.so
extension=pdo_sqlsrv.so
EOF
cat <<EOF > /etc/php/7.0/Apache2/conf.d/99-sqlsrv.ini  
extension=sqlsrv.so
extension=pdo_sqlsrv.so
EOF

service Apache2 restart
0
itshorty