Linux下如何使用php访问sql server

发布时间:2022-01-26 11:20:01 作者:小新
来源:亿速云 阅读:176
# 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

二、安装ODBC驱动

Microsoft官方提供了Linux版的ODBC驱动,这是连接SQL Server的关键组件。

2.1 添加微软仓库

# 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

2.2 安装驱动

# 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

2.3 验证安装

odbcinst -q -d -n "ODBC Driver 17 for SQL Server"

三、编译安装PHP的SQLSRV扩展

3.1 下载扩展包

从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

3.2 配置PHP.ini

php.ini中添加:

extension=sqlsrv.so
extension=pdo_sqlsrv.so

验证加载:

php -m | grep sqlsrv

四、连接测试

4.1 基本连接示例

<?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 "连接成功!";
}
?>

4.2 PDO连接方式

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());
}

五、常见问题解决

5.1 连接超时

在连接字符串中添加超时参数:

"LoginTimeout" => 30

5.2 SSL加密问题

现代SQL Server默认要求加密连接,可在连接选项中禁用(不推荐):

"Encrypt" => false

或正确配置证书:

sudo curl -o /etc/ssl/certs/microsoft.cer \
    https://curl.haxx.se/ca/cacert.pem

5.3 中文乱码

指定字符集:

"CharacterSet" => "UTF-8"

六、性能优化建议

  1. 使用连接池:通过sqlsrv_connectConnectionPooling选项启用
  2. 预处理语句:始终使用参数化查询
  3. 批处理操作:对于大量数据操作使用批量插入

示例批处理:

$params = [ [$_POST['name'], $_POST['price']] ];
$stmt = sqlsrv_prepare(
    $conn,
    "INSERT INTO Products (Name, Price) VALUES (?, ?)",
    $params
);
if (sqlsrv_execute($stmt) === false) {
    // 错误处理
}

七、安全注意事项

  1. 永远不要在代码中硬编码凭据
  2. 使用最小权限原则创建数据库用户
  3. 启用SQL Server的审计日志
  4. 定期更新ODBC驱动和PHP扩展

推荐使用环境变量存储密码:

getenv('DB_PASSWORD')

结语

通过本文的步骤,您已经成功在Linux系统上配置了PHP与SQL Server的连接。这种跨平台方案不仅扩展了PHP的应用场景,还能有效利用SQL Server在企业环境中的优势。当遇到问题时,建议查阅:

在实际生产环境中,建议进行充分的测试和性能评估,确保系统稳定可靠。 “`

注:本文实际约1500字,可根据需要调整具体章节的详细程度。代码块中的服务器地址、用户名密码等需要替换为实际值。

推荐阅读:
  1. SQL Server on Linux
  2. 为什么SQL Server实例处在压力下

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux php sql server

上一篇:Linux下如何使用objdump进行反汇编

下一篇:@Transactional注解怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》