# Linux下如何使用PHP访问SQL Server ## 前言 在企业级应用开发中,经常需要跨平台访问不同类型的数据库。虽然PHP与MySQL的组合更为常见,但在某些场景下(如对接企业现有SQL Server数据库时),我们需要在Linux环境下通过PHP连接SQL Server。本文将详细介绍在Linux系统中配置PHP与SQL Server通信的完整流程。 --- ## 一、环境准备 ### 1.1 系统要求 - Linux发行版(Ubuntu/CentOS等) - PHP 7.0+(推荐7.4或8.0+) - SQL Server 2008+(建议2016以上版本) ### 1.2 安装必要组件 ```bash # Ubuntu/Debian sudo apt-get install -y php php-dev unixodbc-dev # CentOS/RHEL sudo yum install -y php php-devel unixODBC-devel
Microsoft官方提供了Linux版的ODBC驱动,这是连接SQL Server的关键组件。
# Ubuntu 20.04 curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - sudo curl -o /etc/apt/sources.list.d/mssql-release.list \ https://packages.microsoft.com/config/ubuntu/20.04/prod.list # CentOS 7 sudo curl -o /etc/yum.repos.d/mssql-release.repo \ https://packages.microsoft.com/config/rhel/7/prod.repo
# Ubuntu sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools # CentOS sudo yum remove unixODBC-utf16 unixODBC-utf16-devel sudo ACCEPT_EULA=Y yum install -y msodbcsql17 mssql-tools
odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
从PECL获取最新版:
sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv
或手动下载:
wget https://pecl.php.net/get/sqlsrv-5.10.1.tgz tar -xzvf sqlsrv-5.10.1.tgz cd sqlsrv-5.10.1/ phpize ./configure make sudo make install
在php.ini
中添加:
extension=sqlsrv.so extension=pdo_sqlsrv.so
验证加载:
php -m | grep sqlsrv
<?php $serverName = "your_server_ip,1433"; $connectionOptions = [ "Database" => "your_database", "Uid" => "sa", "PWD" => "your_password" ]; $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); } else { echo "连接成功!"; } ?>
try { $conn = new PDO( "sqlsrv:Server=your_server_ip,1433;Database=your_db", "sa", "your_password" ); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("连接失败: " . $e->getMessage()); }
在连接字符串中添加超时参数:
"LoginTimeout" => 30
现代SQL Server默认要求加密连接,可在连接选项中禁用(不推荐):
"Encrypt" => false
或正确配置证书:
sudo curl -o /etc/ssl/certs/microsoft.cer \ https://curl.haxx.se/ca/cacert.pem
指定字符集:
"CharacterSet" => "UTF-8"
sqlsrv_connect
的ConnectionPooling
选项启用示例批处理:
$params = [ [$_POST['name'], $_POST['price']] ]; $stmt = sqlsrv_prepare( $conn, "INSERT INTO Products (Name, Price) VALUES (?, ?)", $params ); if (sqlsrv_execute($stmt) === false) { // 错误处理 }
推荐使用环境变量存储密码:
getenv('DB_PASSWORD')
通过本文的步骤,您已经成功在Linux系统上配置了PHP与SQL Server的连接。这种跨平台方案不仅扩展了PHP的应用场景,还能有效利用SQL Server在企业环境中的优势。当遇到问题时,建议查阅:
在实际生产环境中,建议进行充分的测试和性能评估,确保系统稳定可靠。 “`
注:本文实际约1500字,可根据需要调整具体章节的详细程度。代码块中的服务器地址、用户名密码等需要替换为实际值。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。