php远程连接sqlserver数据库

服务器环境:
centos7 + nginx + php7.2

官方配置链接:https://docs.microsoft.com/zh-cn/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#installing-the-drivers-with-php-fpm-on-ubuntu

以下步骤是在已经安装了lnmp环境下的服务器操作
若没环境请先安装php和nginx
若要安装 PHP 7.3 或 7.4,请使用以下命令将 7.2 替换为 7.3 或 7.4。

配置步骤:

1. 安装odbc驱动

sudo su
curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
exit
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install msodbcsql
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo yum install unixODBC-devel

其他类型服务器可参考https://docs.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017#odbc-131

2. 安装适用于 Microsoft SQL Server 的 PHP 驱动程序

sudo pecl config-set php_ini /etc/php/7.2/fpm/php.ini
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.2/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7./mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv

如果系统中只有一个 PHP 版本,则可以将最后一个步骤简化为 phpenmod sqlsrv pdo_sqlsrv。
验证 sqlsrv.ini 和 pdo_sqlsrv.ini 是否位于 /etc/php/7.4/fpm/conf.d/:

ls /etc/php/7.4/fpm/conf.d/*sqlsrv.ini

重新启动 PHP-FPM 服务:

sudo systemctl restart php-fpm

以上操作完之后就可以链接sqlserver了。
连接sqlserver测试代码:

$serverName = "192.168.1.111\\sqlexpress, 1433"; //serverName\instanceName, portNumber (default is 1433)
$connectionInfo = array( "Database"=>"数据库名", "UID"=>"用户名", "PWD"=>"密码", "CharacterSet" => "UTF-8");
//CharacterSet设置为UTF-8,不设置可能会遇到中文数据无法读取的问题。
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
    echo "Connection established.<br />";
    $sql = "select * from 数据表";
    $result = sqlsrv_query($conn, $sql);
    if($result === false) {
        die(print_r(sqlsrv_errors(), true));
    }
    #Fetching Data by array
    while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
        print_r($row);
    }
    
}else{
    echo "Connection could not be established.<br />";
    die( print_r( sqlsrv_errors(), true));
}




扩充: 替换第二种的方法

另外提供一种手动下载驱动程序的方法,可替代上面第二步:
驱动程序下载地址https://github.com/Microsoft/msphpsql/releases/tag/v5.6.1
选择对应版本,我的是centos7-7.2

解压后根据phpinfo中的Thread Safety属性选择对应的文件
若为disabled则为非线性安全


将文件通过sftp软件放到默认php模块目录下

然后修改php.ini配置文件
在动态扩展处加上以下两个扩展

extension=php_sqlsrv_72_nts.so
extension=php_pdo_sqlsrv_72_nts.so


加完之后重启php服务

sudo systemctl restart php-fpm

木点点 i
请先登录后发表评论
  • 最新评论
  • 总共0条评论