如何从 Ubuntu 18.04 使用 PHP 连接到 MSSQL Server?

Posted

技术标签:

【中文标题】如何从 Ubuntu 18.04 使用 PHP 连接到 MSSQL Server?【英文标题】:How to connect to MSSQL Server with PHP from Ubuntu 18.04? 【发布时间】:2020-03-06 17:43:18 【问题描述】:

我想从 Ubunutu 18.04 建立一个 MSSQL 连接。进行此设置非常困难,但知道它到目前为止可以使用,因此我可以使用 sql_srv 类或 pdo 类。 但是当我想连接时,连接失败并出现错误

Array ( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 0 [code] => 0 [2] => [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found [message] => [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found ) ).

我该如何解决这个问题?这个错误是什么意思? 我已经安装了 ODBC 17。

 odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

nano /etc/odbcinst.ini 显示:

[用于 SQL Server 的 ODBC 驱动程序 17] 描述=Microsoft ODBC 驱动程序 17 对于 SQL 服务器 驱动程序=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.1.1 UsageCount=1

如何从 ubuntu 18.04 连接 MSSQL Server 2014?

【问题讨论】:

你的代码在哪里?你为什么使用 odbc? 亲爱的用户,我还能用什么?我尝试连接这两种方式: sqlsrv_connect 和 new PDO("sqlsrv:server=$servername,$port;Database=$database;ConnectionPooling=0", $username, $password);都失败了 【参考方案1】:

已解决: 通过这三个页面,我可以安装正确的驱动程序版本:

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15#ubuntu17

Pecl install sqlsrv returns No releases available for package

从http://pecl.php.net/package/sqlsrv/5.8.0下载驱动程序

sudo bash -c "echo extension=sqlsrv.so > /etc/php/7.2/mods-available/sqlsrv.ini"
sudo ln -s /etc/php/7.2/mods-available/sqlsrv.ini /etc/php/7.2/apache2/conf.d/sqlsrv.ini
sudo ln -s /etc/php/7.2/mods-available/sqlsrv.ini /etc/php/7.2/cli/conf.d/sqlsrv.ini
sudo bash -c "echo extension=pdo_sqlsrv.so > /etc/php/7.2/mods-available/pdo_sqlsrv.ini"
sudo ln -s /etc/php/7.2/mods-available/pdo_sqlsrv.ini /etc/php/7.2/apache2/conf.d/pdo_sqlsrv.ini
sudo ln -s /etc/php/7.2/mods-available/pdo_sqlsrv.ini /etc/php/7.2/cli/conf.d/pdo_sqlsrv.ini


sudo systemctl restart apache2

【讨论】:

【参考方案2】:
    安装 PECL 按照https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15 中提到的步骤进行操作 重启 Apache 使用下面的 PHP 脚本测试连接
//format: serverName\instanceName, portNumber (default is 1433)
$serverName = "localhost";

$connectionInfo = array("Database" => "dbName", "UID" => "myUserName", "PWD" => "myPassword");
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn) 
    echo "Got a connection!<br />";
 else 
    echo "Connection could not be established.<br />";
    die(print_r(sqlsrv_errors(), true));

【讨论】:

【参考方案3】:

使用Microsoft Drivers for PHP for Microsoft SQL Server。您将在那里找到详细的安装说明。

【讨论】:

您好,这对我不起作用。上线的最后一个选项是切换到 Windowsserver... 因为我无法连接,导致我的 .so 文件在 php 中找不到。 phpinfo() 中没有 _pdo 标记; 确保安装正确的 PHP 版本的扩展。详细说明可以在microsoft.com/en-us/sql-server/developer-get-started/php/ubuntu/… 找到。驱动程序本身适用于 Ubuntu。

以上是关于如何从 Ubuntu 18.04 使用 PHP 连接到 MSSQL Server?的主要内容,如果未能解决你的问题,请参考以下文章

如何从安装在Ubuntu 18.04 VirtualBox上的Wordpress Web界面编写/上传

将Ubuntu18.04安装到U盘,实现即插即用

Ubuntu 18.04 LTS 中不存在 conf php7.1-cgi

ubuntu18.04系统安装及php7.2,apache2,mysql8,git,svn,composer,vs code 到安装 php 扩展配置php.ini 实现 laravel5.8 运行(

PHP如何搭建服务器环境 原生篇 | Ubuntu 18.04 + PHP8.1 + MySQL5.7 + Nginx 1.4

PHP如何搭建服务器环境 原生篇 | Ubuntu 18.04 + PHP8.1 + MySQL5.7 + Nginx 1.4