Linux - PHP 7.0和MSSQL(Microsoft SQL)

时间:2015-12-20 02:10:54

标签: php sql-server linux odbc php-7

是的,我知道PHP 7.0删除了连接到MSSQL所需的扩展。 FreeTDS是我在PHP 7.0之前的选择,但现在确实没有明显的升级路径需要仍然连接到MSSQL。

愚蠢的问题,但鉴于MSSQL在企业环境中使用得非常好,我们应该如何连接到以PHP 7.0开头的数据库呢?

我是否忽视了一些明显的东西,或者PHP 7的发布基本上给那些需要连接到MSSQL的人带来了打击?

为清楚起见,我 NOT 谈论从运行PHP的Windows服务器进行连接,我需要从Linux服务器连接到MSSQL,因此需要Linux ODBC驱动程序。

是否有人制作了可以免费或收费的MSSQL 2012和PHP 7.0这样的东西?

对我来说奇怪的是,没有太多的PHP 7和MSSQL信息。虽然PHP 7在印刷机上是新鲜的,但是必须有更多的MSSQL商店(FWIW我们同时使用它们)。

7 个答案:

答案 0 :(得分:31)

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

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

参考链接:

答案 1 :(得分:8)

tldr; 对于包含大量参数的大型查询,sqlsrv和pdo_sqlsrv php扩展速度非常慢,但安装和使用pdo-dblib为我解决了这个问题。

在Ubunutu 16.04上运行php framework 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 );

会正常工作。

答案 2 :(得分:5)

官方MS扩展有PHP 7分支:

还有很多东西缺失,有些标记为计划(Linux支持就在其中),但它可能是未来的另一种解决方案。

编辑(09-09-2016):自3月以来已经发布的Linux版本已经很少,CentOS / Ubuntu特定的软件包和源代码可用。请记住,它们尚未标记为生产就绪。

答案 3 :(得分:1)

根据上面的答案 - 步骤输出共享对象(* .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*||"`

答案 4 :(得分:0)

我修改了

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

修改freetds.conf,安装php mssql module

yum install php-mssql.x86_64

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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

这在PHP 7.0上对我有效,但仍然需要在

上添加扩展名
  

/etc/php/7.0/apache2/php.ini

以及

  

/etc/php/7.0/cli/php.ini