【问题标题】:Error connecting to SQL Server.PDOException Object (Azure)连接到 SQL Server.PDOException 对象时出错 (Azure)
【发布时间】:2020-01-27 18:16:56
【问题描述】:

我正在尝试使用 PHP 连接到我的 Azure SQL 数据库,该数据库由我的其他服务器每晚 00:00 通过 cronjob 运行。运行时在日志中显示此错误:

 Error connecting to SQL Server.PDOException Object
(
    [message:protected] => could not find driver
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => /home3/nappuntx/public_html/modifiche/export.php
    [line:protected] => 73
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /home3/nappuntx/public_html/modifiche/export.php
                    [line] => 73
                    [function] => __construct
                    [class] => PDO
                    [type] => ->
                    [args] => Array
                        (
                            [0] => sqlsrv:server = tcp:prgsophie.database.windows.net,1433; Database = test_db
                            [1] => userTest
                            [2] => pswtest
                        )

                )

        )

    [previous:Exception:private] => 
    [errorInfo] => 
)
1

这里提到:https://docs.microsoft.com/it-it/sql/connect/php/microsoft-php-driver-for-sql-server?redirectedfrom=MSDN&view=sql-server-ver15 我应该在我的 Linux 服务器上安装 PDO 驱动程序吗?我不确定,因为我在这里读过:https://www.php.net/manual/en/pdo.installation.php" PDO 和 PDO_SQLITE 驱动程序从 PHP 5.1.0 开始默认启用。您可能需要为您选择的数据库启用 PDO 驱动程序;请参阅文档数据库特定的 PDO 驱动程序以了解更多信息。”所以理论上它已经包含在我的 PHP 驱动程序中。我在我的 Linux Red Hat 服务器上使用 PHP 版本 7.2.26... 期待支持,谢谢。

【问题讨论】:

  • 它是这么说的,但你还没有检查。在shell的命令行执行php -m | grep 'pdo_sqlite',你有什么回馈吗?
  • 查看phpinfo();我可以看到:1) --enable-pdo=shared 2) API 扩展 mysqli,pdo_mysql ' 3) PDO 驱动程序 mysql, sqlite ENABLED。我实际上需要 PDO 驱动程序的 MySQL 驱动程序支持,而且似乎我有,但我不知道为什么它给了我这个异常。
  • 那就用mysqli吧,它可以做任何PDO可以做的事情

标签: php azure


【解决方案1】:

让我先重复一下您的需求。我看到您尝试使用PHP PDO连接Azure SQL数据库,但错误信息显示没有支持SQL Azure连接的PHP驱动程序,您的环境如下。

  1. PHP 7.4,您好像是手动编译安装了v7.4,请确保您已安装到/usr/bin/usr/local/bin或其他系统路径。
  2. Linux 服务器,但我不知道你使用的是什么 Linux 发行版,所以我假设是 Ubuntu/Debian。

接下来首先需要参考官方文档Microsoft PHP Drivers for SQL Server Support MatrixPHP Version Support部分了解Azure SQL Database的PHP PDO驱动是什么版本的PHP v7.4,如下图。

PHP 7.4 似乎没有任何版本,但最新版本 5.6 是唯一的选择。

然后,你需要移动到Download the Microsoft Drivers for PHP for SQL Server点击链接Microsoft Drivers 5.6 for PHP for SQL Server for Linux and macOS,它会重定向到它的GitHub发布页面Production Release for the PHP drivers Version 5.6.0 for SQL Server并移动到页面底部,如下图。

当然,你可以随心所欲地下载软件包,但我认为简单的方法是通过pecl安装sqlsrvpdo_sqlsrv,首先是通过pecl准备好pecl on Ubuntu/Debian Linux,然后在下面做这些。

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv

现在,我想你可以再试试你的 PHP 脚本,如果你用过的话,可以先重启 Apache/Nginx。


更新:关于在 RHEL 上使用 PHP 7.2,我建议请参考官方教程Create PHP apps using SQL Server on RHEL 详细了解如何逐步操作。

【讨论】:

  • 非常感谢@Peter,我会尝试您的建议!
  • 意识到我的 Linux 服务器是 Red Hat,很抱歉错过了这个信息,并且 PHP 版本是 7.2.26 所以正如你所说@Peter 我会尝试在我的电脑上安装来自 Microsoft 的 5.6 驱动程序它托管的服务器,我会打开一个打勾的。最后一个问题,那么 freeTDS 呢?你知道吗?会有帮助吗?
  • @SimoneDeLuca 我为你更新了我的帖子,很简单。请使用MS推荐的官方解决方案。
  • 非常感谢!我将按照教程进行操作
猜你喜欢
  • 2013-05-31
  • 2021-10-22
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多