はい、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は両方を使用しています)。
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!"
?>
参考リンク:
PHP7のsybaseにはpdo_dblibモジュールが含まれています。
Sudo apt install php7.0-sybase
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 );
うまくいくでしょう。
私は間違いなくあなたに同意します。私は主に職場でSQL Serverを使用しており、PHPにSQLサーバーのデフォルトドライバーが含まれていない理由を理解していません。
Linuxの場合、以前に使用したものがあまりわかりませんが、「dblib」ドライバーがSQL Serverに接続するのに最適なドライバーであることがわかりました。
ただし、基本的にLinuxボックスの場合は、これらのいくつかの手順を実行して、SQLサーバードライバーをインストールするだけです。
apt-get install freetds-dev -y
vim /etc/freetds.conf
次に、そこに接続を追加し、Apacheを再起動してください。
公式MS拡張機能には、PHP 7のブランチがあります。
まだ多くのものが欠けていますが、いくつかは計画通りにマークされています(Linuxサポートもその中にあります)、それでも将来的には別の解決策になるかもしれません。
EDIT(2016年9月9日):3月以降、CentOS/Ubuntu固有のパッケージとソースが利用可能なLinuxリリースはすでにほとんど公開されていません。それらはまだProduction Readyとしてマークされていないことに注意してください。
上記の答えによると-ステップは共有オブジェクト(* .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*||"`
変更しました
yum install freetds-dev
vim /etc/freetds.conf
Freetds.confを変更し、php mssqlモジュールをインストールします
yum install php-mssql.x86_64
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