Linux - PHP 7.0和MSSQL(Microsoft SQL)

Don*_*ton 41 php linux sql-server odbc php-7

是的,我知道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我们同时使用它们).

mee*_*dev 32

Microsoft在PECL上为PHP 7及更高版本提供了用于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*||"`
Run Code Online (Sandbox Code Playgroud)

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*||"`
Run Code Online (Sandbox Code Playgroud)

这将安装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!"
?>
Run Code Online (Sandbox Code Playgroud)

参考链接:

  • 在安装PECL模块(Ubuntu 16.04,全新安装)之前,我发现需要另外两个命令:`sudo apt-get install php-pear``sudo apt-get install php7.0-dev`(除了添加.所以到php.ini中的扩展名文件名) (2认同)

小智 20

PHP7的sybase包含pdo_dblib模块.

sudo apt install php7.0-sybase
Run Code Online (Sandbox Code Playgroud)


gri*_*zzb 9

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
Run Code Online (Sandbox Code Playgroud)

然后查询处理得更快.

欲获得更多信息:

在引擎盖下laravel使用这样的PDOStatement:

$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);
$stmt = $conn->prepare( $query );
$stmt->execute($param);
Run Code Online (Sandbox Code Playgroud)

在哪里直接查询就好

$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);
$results = $conn->query( $query_with_parameter_already_bound );
Run Code Online (Sandbox Code Playgroud)

会工作得很好.


小智 4

我绝对同意你的观点。我在工作中主要使用 SQL Server,不明白为什么它们没有在 PHP 中包含 SQL Server 的默认驱动程序。

对于 Linux,我不太确定您以前使用过什么,但我发现“dblib”驱动程序是连接到 SQL Server 的最佳驱动程序。

但基本上,对于 Linux 机器,您只需运行这几个步骤即可安装 SQL Server 驱动程序。

apt-get install freetds-dev -y
vim /etc/freetds.conf
Run Code Online (Sandbox Code Playgroud)

然后继续添加您的连接并重新启动 apache,您就可以开始了!