web-dev-qa-db-ja.com

Linux-PHP 7.0およびMSSQL(Microsoft SQL)

はい、PHP 7.0はMSSQLへの接続に必要な拡張機能を削除したことを知っています。 FreeTDSはPHP 7.0より前の私のオプションでしたが、今でもMSSQLに接続する必要がある人のための明確なアップグレードパスはありません。

馬鹿げた質問ですが、MSSQLがエンタープライズ環境で最もよく使用されていることを考えると、PHP 7.0以降のデータベースにどのように接続するのでしょうか。

露骨に明白なものを見落としているのですか、それともPHP 7のリリースは、基本的にMSSQLに接続する必要のある人に平手打ちを与えたのですか?

明確にするために、私はではなく PHPを実行するWindowsサーバーからの接続について話します。LinuxサーバーからMSSQLに接続する必要があるため、Linux ODBCドライバーが必要です。 。

MSSQL 2012およびPHP 7.0で動作するものを、だれでも無料または有料で提供できるものはありますか?

PHP 7とMSSQLの情報があまりないことは私には奇妙です。 PHP 7は報道されたばかりですが、もっと多くのMSSQLショップが必要です(FWIWは両方を使用しています)。

40
Donavon Yelton

Microsoftは、PHP 7以上のPECLにSQL Server用のPHP Linuxドライバーを用意しています。これらは生産準備完了です。それらをダウンロードするには、次の手順を実行します。

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!"
?>

参考リンク:

31
meet-bhagdev

PHP7のsybaseにはpdo_dblibモジュールが含まれています。

Sudo apt install php7.0-sybase
20
shrty

tldr; sqlsrvおよびpdo_sqlsrvのPHP拡張は、多くのパラメーターを含む大規模なクエリでは非常に遅くなりましたが、pdo-dblibをインストールして使用すると問題が解決しました。

Ubunutu 16.04上のphpフレームワークlaravel 5.1および5.6(php 7.1および7.2)で実行パッケージsqlsrvおよびpdo_sqlsrvは、大規模なクエリではうまく機能しないことがわかりました。 30個のバインド変数を持つ大きなクエリがありました。 Sql Server 2008は、バインドされたすべての変数をnvarchar(4000)に変換し、dbにキャストの負荷を永久にかけさせました。

次に、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 );

うまくいくでしょう。

9
grizzb

私は間違いなくあなたに同意します。私は主に職場でSQL Serverを使用しており、PHPにSQLサーバーのデフォルトドライバーが含まれていない理由を理解していません。

Linuxの場合、以前に使用したものがあまりわかりませんが、「dblib」ドライバーがSQL Serverに接続するのに最適なドライバーであることがわかりました。

ただし、基本的にLinuxボックスの場合は、これらのいくつかの手順を実行して、SQLサーバードライバーをインストールするだけです。

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

次に、そこに接続を追加し、Apacheを再起動してください。

4
Jordan

公式MS拡張機能には、PHP 7のブランチがあります。

まだ多くのものが欠けていますが、いくつかは計画通りにマークされています(Linuxサポートもその中にあります)、それでも将来的には別の解決策になるかもしれません。

EDIT(2016年9月9日):3月以降、CentOS/Ubuntu固有のパッケージとソースが利用可能なLinuxリリースはすでにほとんど公開されていません。それらはまだProduction Readyとしてマークされていないことに注意してください。

4
bjauy

上記の答えによると-ステップは共有オブジェクト(* .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