我需要一个可以使用 php 连接到外部 MYSQL 数据库的 docker 映像

Posted

技术标签:

【中文标题】我需要一个可以使用 php 连接到外部 MYSQL 数据库的 docker 映像【英文标题】:I need a docker image that can get connected to an external MSSQL datatbase with php 【发布时间】:2021-09-13 19:21:07 【问题描述】:

我需要一个在执行 php 脚本时可以连接到外部 MSSQL 数据库的 docker 映像。我已经创建了一个,但我只能通过 tsql CLI 连接到数据库。我认为它使用 Freetds。但是当我尝试使用 php 脚本时,我遇到了一个错误,说 php 找不到 PDO 库...有人可以帮我找出我错过了什么吗?

这是我使用的图像:

FROM php:7.4-cli

RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
  unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

ADD freetds.conf /etc/freetds/freetds.conf
ADD locales.conf /etc/freetds/locales.conf

CMD ["/bin/bash"]

PHP 脚本如下所示:

try 
    $conn = new PDO("dblib:host=$sql_host;dbname=$sql_dbnm", "$sql_user", "$sql_pswd");
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
 catch (Exception $e) 
    var_dump($e);
    die(print_r($e->getMessage()));


$tsql = "SELECT field FROM table";
$getResults = $conn->prepare($tsql);
$getResults->execute();

$results = $getResults->fetchAll(PDO::FETCH_BOTH);
foreach($results as $row)
    echo "$row['field']\n";

谢谢

【问题讨论】:

【参考方案1】:

我找到了办法。 这是我的 Dockerfile 的内容:

FROM php:7.3

# Update packages
RUN apt-get update

# Install PHP and composer dependencies
RUN apt-get install gnupg -qq git wget curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev libzip-dev

# Clear out the local repository of retrieved package files
RUN apt-get clean

# Install needed extensions
# Here you can install any other extension that you need during the test and deployment process
RUN docker-php-ext-install pdo_mysql zip

# adding custom MS repository
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
# install SQL Server drivers
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y unixodbc-dev msodbcsql17
RUN wget http://pecl.php.net/get/sqlsrv-5.9.0.tgz
RUN pear install sqlsrv-5.9.0.tgz
RUN docker-php-ext-enable sqlsrv

RUN wget http://pecl.php.net/get/pdo_sqlsrv-5.9.0.tgz
RUN pear install pdo_sqlsrv-5.9.0.tgz
RUN docker-php-ext-enable pdo_sqlsrv
RUN echo "extension= pdo_sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
RUN echo "extension= sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

【讨论】:

【参考方案2】:

更简单的方法是使用install-php-extensions:它可以让您安装大量的 PHP 扩展,只需 1 行代码:

COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/

RUN install-php-extensions pdo_sqlsrv sqlsrv

更多详情请关注https://github.com/mlocati/docker-php-extension-installer

【讨论】:

以上是关于我需要一个可以使用 php 连接到外部 MYSQL 数据库的 docker 映像的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 连接到远程 MySQL 数据库的网页

如何通过管道将 PHP 应用程序连接到 MySQL?

无法用php连接到mysql

将 PHP 连接到 IBM UniVerse

连接到另一个IP(服务器)上的MySQL,PHP [重复]

在 PHP 中通过 SSH 连接到 MySQL