it-swarm.com.ru

Linux - PHP 7.0 и MSSQL (Microsoft SQL)

Да, я знаю, что PHP 7.0 удалил расширения, необходимые для подключения к MSSQL. FreeTDS был моим вариантом до PHP 7.0, но сейчас действительно нет очевидного пути обновления для тех, кому все еще нужно подключаться к MSSQL.

Глупый вопрос, но, учитывая, что MSSQL наверняка хорошо используется в корпоративных средах, как мы должны подключаться к этим базам данных, начиная с PHP 7.0?

Я упускаю из виду что-то явно очевидное или релиз PHP 7 в основном дает пощечину любому, кому нужно подключиться к MSSQL?

Для ясности яНЕговорю о подключении с сервера Windows, работающего на PHP, мне нужно подключиться к MSSQL с сервера Linux и, следовательно, потребуется драйвер Linux ODBC.

Кто-нибудь делает такую ​​вещь, которая работает с MSSQL 2012 и PHP 7.0, которую можно получить бесплатно или за плату?

Мне странно, что там не так много PHP 7 и информации MSSQL. Предположим, что PHP 7 только что появился, но должно быть больше магазинов MSSQL (FWIW мы используем оба).

38
Donavon Yelton

Microsoft имеет PHP драйверы Linux для SQL Server для PHP 7 и выше на PECL. Это производство готово. Чтобы загрузить их, выполните следующие действия.

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

Это установит PHP драйверы SQL Server и зарегистрирует их в папке php.ini. 

Убедитесь, что это работает, используя следующий пример

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

Ссылки для справки:

30
meet-bhagdev

Sybase PHP7 содержит модуль pdo_dblib.

Sudo apt install php7.0-sybase
18
shrty

tldr; Расширения php sqlsrv и pdo_sqlsrv были очень медленными с большими запросами с большим количеством параметров, но установка и использование pdo-dblib решили эту проблему для меня.

Запуск на php framework laravel 5.1 и 5.6 (на php 7.1 и 7.2) на Ubunutu 16.04. Я обнаружил, что пакеты sqlsrv и pdo_sqlsrv не работают для больших запросов. У меня был большой запрос с 30 связанными переменными. Sql Server 2008 преобразовал все связанные переменные в nvarchar (4000), в результате чего БД выполняла нагрузки приведения, принимающие навсегда.

Затем я отключаю расширения sqlsrv.so и pdo_sqlsrv.so и устанавливаю расширение pdo-dblib:

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

Тогда запрос обрабатывается намного быстрее.

Для дополнительной информации:

Под капотом Laravel использует PDOStatement, как это:

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

где прямой запрос типа 

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

будет работать нормально.

8
grizzb

Официальное расширение MS имеет ветку для PHP 7:

По-прежнему много чего не хватает, некоторые помечены как запланированные (поддержка Linux входит в их число), тем не менее, это может стать еще одним решением в будущем.

EDIT (09-09-2016): Уже было выпущено несколько выпусков Linux с марта, с доступными специальными пакетами CentOS/Ubuntu и источником. Имейте в виду, что они еще не помечены как готовые к производству.

5
bjauy

Я определенно согласен с вами. Я работаю в основном с SQL-серверами на работе и не понимаю, почему они не включают драйверы по умолчанию для SQL-серверов в PHP.

Для Linux я не совсем уверен, что вы использовали ранее, но я обнаружил, что драйвер "dblib" является лучшим драйвером для подключения к SQL Server.

Но в основном для Linux, вы просто хотите выполнить эти несколько шагов, чтобы установить драйвер сервера SQL.

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

Затем добавьте туда свои соединения и перезапустите Apache, и все будет хорошо!

4
Jordan

Согласно ответу выше - шаги выводят общий объект (* .so), поэтому файлу php.ini также нужно расширение файла. 

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

Я модифицировал

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

И измените freetds.conf, установите модуль php mssql

yum install php-mssql.x86_64
0
Caat c

Краткий дамп для людей 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
0
itshorty