要求與PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT, mixed ...$args)相容
P粉308089080
P粉308089080 2023-12-10 23:55:42
0
1
497

我們的客戶有一個 drupal 網站,但主機強制所有客戶端從 PHP 7.4 到 PHP 版本 8,導致 PDO 致命錯誤導致網站無法載入。

收到錯誤:

致命錯誤:聲明 DrupalCoreDatabaseStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT,$column_index = null,$constructor_arguments = null) 必須與 PDOStatement::fetchAll(int $mode = 相容 PDO::FETCH_DEFAULT,混合...$args) /usr/www/users/kdpsipxqzt/core/lib/Drupal/Core/Database/Statement.php 在第 168 行

導致問題的函數:

ERROR (L 168) -> 
public function fetchAll($mode = null, $column_index = NULL, $constructor_arguments = NULL) {
    // Call PDOStatement::fetchAll to fetch all rows.
    // PDOStatement is picky about the number of arguments in some cases so we
    // need to be pass the exact number of arguments we where given.

    switch (func_num_args()) {
      case 0:
        return parent::fetchAll();
      case 1:
        return parent::fetchAll($mode);
      case 2:
        return parent::fetchAll($mode, $column_index);
      case 3:
      default:
        return parent::fetchAll($mode, $column_index, $constructor_arguments);
    }
  }

有人有解決這個問題的想法嗎?

我嘗試了多種方式進行故障排除,調整函數以更好地匹配 PHP 的 PDOStatement 父函數,但沒有成功!

與 PHP 的 PDOStatement 比較:

public function fetchAll($how = null, $className = null, $ctorArgs = null)

我錯過了什麼嗎?

P粉308089080
P粉308089080

全部回覆(1)
P粉265724930

傳回類型必須設定為陣列

public function fetchAll($mode = null, $column_index = null, $constructor_arguments = null) : array { ... }

如果您使用的是 PHP8.1,您可以透過新增註解 #[\ReturnTypeWillChange] 來繞過該錯誤

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板