【问题标题】:PHP Deprecated: Automatic conversion of false to array is deprecated adodb-mssqlnative.inc.php on line 154不推荐使用 PHP:第 154 行不推荐使用将 false 自动转换为数组的 adodb-mssqlnative.inc.php
【发布时间】:2022-08-03 14:50:23
【问题描述】:

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

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

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

extension=php_sqlsrv_81_nts_x64.dll
extension=php_pdo_sqlsrv_81_nts_x64.dll

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

标签: php sql-server php-8.1 autovivification adodb-php


【解决方案1】:

这是向后不兼容的known issue,影响 ADOdb 库版本 5.22.1 和更早版本。 PHP 8.1 warns you on autovivification of false-y values 和 PHP 的某些未来版本会在您执行此操作时引发错误。

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

他们举了这个例子

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

我去了found the file in question,这就是它的功能

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 = [];

【讨论】:

    【解决方案2】:

    我也有这个错误。 在 PHP 9.0 中,这将引发致命错误。 您可以使用 isset() 或 ??修复它。 或访问提到的链接。 https://wiki.php.net/rfc/autovivification_false

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      相关资源
      最近更新 更多