簡體   English   中英

為什么在使用 while 循環時出現“嘗試訪問 bool 類型值的數組偏移量”?

[英]Why am I getting "Trying to access array offset on value of type bool" when using a while loop?

我有一個 PDO object,代碼如下:

$query = "SELECT DISTINCT SUBSTR( Date(Date), 1, 4) AS YEAR from Events ORDER BY YEAR DESC;";
$sth = $dbh->query( $query );
while( $row = $sth->fetch( PDO::FETCH_ASSOC )['YEAR'] ) {
  print $row
}

代碼執行,但我得到

嘗試訪問 bool 類型值的數組偏移量

解釋是什么,有解決辦法嗎?

while循環的工作方式是,只要條件計算結果為 boolean true,它就會繼續迭代。

PDOStatement::fetch()將返回一個包含當前行數據的數組,並將內部指針移動到結果中的下一行。 如果沒有更多行,則返回false

這意味着一旦您到達 PDO 結果的末尾, fetch()將返回false並且您無法訪問false上的數組偏移量。 這就是您收到錯誤的原因。

有幾種方法可以解決這個問題。

  1. 不要使用while循環。 沒有理由在您的示例中使用它。

     foreach ($sth as $row) { echo $row['YEAR']; }
  2. 如果您只需要一列,那么就沒有理由獲取數組。

     while( $year = $sth->fetchColumn() ) { echo $year; }
  3. 在執行查詢或使用setFetchMode()時設置獲取模式。

     $sth = $dbh->query( $query, PDO::FETCH_COLUMN, 0 ); foreach ($sth as $year) { echo $year; }

這似乎也有效:

$sth = $dbh->query( $query );
while( $row = $sth->fetch( PDO::FETCH_ASSOC ))
  print $row['YEAR']

我同意foreach更合適

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM