Docker:unixodbc.h 没有这样的文件或目录。已安装 unixodbc-dev 时出现“pecl install sqlsrv”错误

sqlserver

1个回答

写回答

梨涡圆点

2025-07-10 02:24

+ 关注

AI
AI

解决 Docker 安装 sqlsrv 报错:unixodbc.h 没有这样的文件或目录

在使用 Docker 构建应用程序时,有时候我们需要在容器中安装 sqlsrv 扩展来连接 Microsoft SQL Server 数据库。然而,当我们尝试使用 pecl 命令安装 sqlsrv 扩展时,可能会遇到 "unixodbc.h 没有这样的文件或目录" 的错误。本文将为您介绍如何解决这个问题。

问题描述

当我们在 Docker 容器中执行以下命令时:

shell

pecl install sqlsrv

可能会收到以下错误信息:

shell

checking for unixODBC support... yes, shared

checking for odbc_config... no

checking for unixODBC support... yes, shared

checking for odbc_config... no

checking for SQLSRV support via ODBC... yes

checking for SQLSRV support via ODBC... yes

checking for PDO_SQLSRV support via ODBC... no

checking for PDO_SQLSRV support via ODBC... no

checking for PDO_SQLSRV support via ODBC... no

checking for PDO_SQLSRV support via ODBC... no

ERROR: unable to detect ODBC path

ERROR: detect ODBC support fAIled

这是由于缺少 unixODBC 的头文件导致的。幸运的是,我们可以通过安装 unixODBC-dev 软件包来解决这个问题。

解决方法

要解决这个问题,我们可以在 Dockerfile 中添加安装 unixODBC-dev 的命令。以下是一个示例的 Dockerfile:

dockerfile

FROM php:7.4-apache

RUN apt-get update && apt-get install -y unixodbc-dev

RUN pecl install sqlsrv pdo_sqlsrv

RUN docker-php-ext-enable sqlsrv pdo_sqlsrv

在这个示例中,我们使用了 php:7.4-apache 镜像作为基础镜像,并在其中添加了安装 unixODBC-dev 的命令。然后,我们使用 pecl 命令安装了 sqlsrv 和 pdo_sqlsrv 扩展,并通过 docker-php-ext-enable 命令启用了这两个扩展。

案例代码

以下是一个使用 sqlsrv 扩展连接 Microsoft SQL Server 数据库的简单示例代码:

php

<?php</p>$serverName = "localhost";

$connectionOptions = array(

"Database" => "your_Database",

"Uid" => "your_username",

"PWD" => "your_password"

);

//Establishes the connection

$conn = sqlsrv_connect($serverName, $connectionOptions);

if ($conn === false) {

die(print_r(sqlsrv_errors(), true));

}

//Query example

$sql = "SELECT * FROM your_table";

$query = sqlsrv_query($conn, $sql);

if ($query === false) {

die(print_r(sqlsrv_errors(), true));

}

//Fetches the data

while ($row = sqlsrv_fetch_array($query, SQLSRV_FetcH_ASSOC)) {

echo $row['column_name'] . "<br />";

}

//Closes the connection

sqlsrv_close($conn);

?>

在这个示例中,我们首先指定了要连接的数据库服务器、数据库名称以及登录凭据。然后,我们使用 sqlsrv_connect 函数建立与数据库的连接,并使用 sqlsrv_query 函数执行查询。最后,我们使用 sqlsrv_fetch_array 函数遍历查询结果并输出数据。

通过以上步骤,我们可以成功解决 Docker 中安装 sqlsrv 扩展时遇到的 "unixodbc.h 没有这样的文件或目录" 错误,并成功连接 Microsoft SQL Server 数据库。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号