[英]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
上的數組偏移量。 這就是您收到錯誤的原因。
有幾種方法可以解決這個問題。
不要使用while
循環。 沒有理由在您的示例中使用它。
foreach ($sth as $row) { echo $row['YEAR']; }
如果您只需要一列,那么就沒有理由獲取數組。
while( $year = $sth->fetchColumn() ) { echo $year; }
在執行查詢或使用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.