我們的客戶有一個 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)
我錯過了什麼嗎?
傳回類型必須設定為
陣列
:如果您使用的是 PHP8.1,您可以透過新增註解
#[\ReturnTypeWillChange]
來繞過該錯誤