2

我们正在将 PHP 升级到 8.1 版。使用 MS Sql Server 数据库。这一切似乎工作正常,但我在日志文件中看到重复的消息:

[2022 年 2 月 3 日 11:51:18 America/New_York] PHP 已弃用:在 C:...\includes\adodb\drivers\adodb-mssqlnative.inc.php 第 154 行不推荐将 false 自动转换为数组

我已将 adodb 更新到 5.22 版,但这并没有阻止消息记录。ini 文件有

extension=php_sqlsrv_81_nts_x64.dll
extension=php_pdo_sqlsrv_81_nts_x64.dll

有谁知道如何解决这个问题?

4

1 回答 1

2

这是库本身的向后不兼容。PHP 8.1 不再允许自动激活 false-y 值

PHP 本机允许自动激活(从错误值自动创建数组)。这个特性非常有用,并在很多 PHP 项目中使用,尤其是在变量未定义的情况下。但是,允许从 false 和 null 值创建数组有点奇怪。

他们举了这个例子

// From false
$arr = false;
$arr[] = 2;

我去找了有问题的文件,这就是它所在的功能

function ServerInfo() {
    global $ADODB_FETCH_MODE;
    static $arr = false;
    if (is_array($arr))
        return $arr;
    if ($this->fetchMode === false) {
        $savem = $ADODB_FETCH_MODE;
        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    } elseif ($this->fetchMode >=0 && $this->fetchMode <=2) {
        $savem = $this->fetchMode;
    } else
        $savem = $this->SetFetchMode(ADODB_FETCH_NUM);

    $arrServerInfo = sqlsrv_server_info($this->_connectionID);
    $ADODB_FETCH_MODE = $savem;
    $arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];
    $arr['version'] = $arrServerInfo['SQLServerVersion'];//ADOConnection::_findvers($arr['description']);
    return $arr;
}

问题是它开始于

static $arr = false;

然后尝试自动激活一个非数组(错误中的第 154 行)

$arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];

您应该能够通过确保它是一个数组来修复它(理论上)(无论如何他们都应该这样做)。在该行上方添加它以使其成为一个,然后再尝试附加

if(!is_array($arr)) $arr = [];
于 2022-02-08T14:24:27.440 回答