Linux-PHP 7.0 et MSSQL (Microsoft SQL)
Oui, je sais que PHP 7.0 a supprimé les extensions nécessaires pour se connecter à MSSQL. FreeTDS était mon option avant PHP 7.0, mais maintenant il n'y a vraiment pas de chemin de mise à niveau évident pour ceux qui doivent encore se connecter à MSSQL.
question stupide, mais étant donné que MSSQL est très certainement bien utilisé dans les environnements d'entreprise, comment sommes-nous censés nous connecter à ces bases de données à partir de PHP 7.0?
est-ce que j'oublie quelque chose de flagrant ou est-ce que la sortie de PHP 7 donner une gifle à quiconque ayant besoin de se connecter à MSSQL?
par souci de clarté, je suis en parlant de me connecter à partir d'un serveur Windows qui exécute PHP, je dois me connecter à MSSQL à partir d'un serveur Linux et donc avoir besoin d'un pilote Linux ODBC.
est-ce que quelqu'un fait une chose qui fonctionne avec MSSQL 2012 et PHP 7.0 qui peut être fait gratuitement ou contre paiement?
il est étrange pour moi qu'il n'y ait pas beaucoup D'informations PHP 7 et MSSQL à avoir y. Bien sûr, PHP 7 est tout frais sorti des presses, mais il doit y avoir plus de magasins MSSQL là-bas (FWIW nous utilisons les deux).
8 réponses
Microsoft a des pilotes PHP Linux pour SQL Server pour PHP 7 et plus sur PECL. Elles sont prêtes pour la production. Pour les télécharger, suivez les étapes suivantes:
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*||"`
cela installera les pilotes PHP SQL Server et les enregistrera dans le php.ini du dossier.
Vérifier qu'il fonctionne en utilisant l'exemple suivant
<?php
$serverName = "localhost";
$connectionOptions = array(
"Database" => "SampleDB",
"Uid" => "sa",
"PWD" => "your_password"
);
//Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn)
echo "Connected!"
?>
pour les Liens référence:
La base de données de PHP7 contient le module pdo_dblib.
sudo apt install php7.0-sybase
Officiel MS extension a branche pour PHP 7:
- https://github.com/Azure/msphpsql/tree/PHP-7.0 (Windows)
- https://github.com/Microsoft/msphpsql/tree/PHP-7.0-Linux
il y a encore beaucoup de choses manquantes, certaines marquées comme prévu (le support Linux en fait partie), néanmoins cela pourrait être une autre solution dans le futur.
MODIFIER (09-09-2016): il y avait déjà peu de Linux versions publiées depuis mars, avec des paquets spécifiques à CentOS/Ubuntu et des sources disponibles. Gardez à l'esprit qu'ils ne sont pas marqués comme étant prêts pour la Production.
tldr; les extensions PHP sqlsrv et pdo_sqlsrv étaient très lentes avec de grandes requêtes avec beaucoup de paramètres, mais l'installation et l'utilisation de pdo-dblib ont résolu le problème pour moi.
en cours d'Exécution sur le framework php laravel 5.1 et 5.6 (sur php 7.1 et 7.2) sur Ubunutu 16.04. J'ai trouvé que les paquets sqlsrv et pdo_sqlsrv ne fonctionne pas bien pour les grosses requêtes. J'ai eu une grande requête avec 30 variables liées. Sql Server 2008 a converti toutes les variables liées en nvarchar (4000) provoquant le db à faire beaucoup de moulage prend une éternité.
j'ai ensuite désactiver le sqlsrv.donc, et pdo_sqlsrv.donc extentions et installé aop-dblib extension avec:
sudo apt-get install php7.2-pdo-dblib
puis la requête traitée beaucoup plus rapidement.
Pour plus d'informations:
sous le capot laravel utilise une phrase comme celle-ci:
$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);
$stmt = $conn->prepare( $query );
$stmt->execute($param);
où une requête directe comme
$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);
$results = $conn->query( $query_with_parameter_already_bound );
marcherait bien.
je suis absolument d'accord avec vous. Je travaille principalement avec des serveurs SQL au travail et ne comprends pas pourquoi ils n'incluent pas de pilotes par défaut pour les serveurs SQL en PHP.
Pour linux, Je ne suis pas très sûr de ce que vous avez déjà utilisé, mais j'ai trouvé que le pilote "dblib" est le meilleur pilote pour se connecter aux serveurs SQL.
mais essentiellement pour une machine linux, vous voulez juste exécuter ces quelques étapes pour avoir un pilote sql server installé.
apt-get install freetds-dev -y
vim /etc/freetds.conf
alors allez-y et ajoutez votre des connexions et redémarrez apache et vous devriez être bon d'aller!
selon la réponse ci - dessus-les pas produisent un objet partagé (*.so) so the php.le fichier ini a besoin de l'extension de fichier aussi.
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*||"`
j'ai modifié
yum install freetds-dev
vim /etc/freetds.conf
yum install php-mssql.x86_64
un petit dump pour les gens de Debian:
# 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