我終于抽出時(shí)間將我的 PHP 安裝從 7.2 更新到 7.4(計(jì)劃直接更新到當(dāng)前版本,但要分步驟進(jìn)行),當(dāng)我運(yùn)行現(xiàn)有腳本時(shí)出現(xiàn)了一個(gè)奇怪的錯(cuò)誤:
消息:嘗試訪問(wèn) null 類型值的數(shù)組偏移量
出現(xiàn)的這一行只是從一個(gè)簡(jiǎn)單的 mysql 結(jié)果集中填充一個(gè)數(shù)組。
for($i = 0; $resultArray[$i] = mysqli_fetch_row($result)[0]; $i++) ;
腳本仍然可以正常運(yùn)行,但我只是不喜歡出現(xiàn)任何錯(cuò)誤。我很困惑為什么會(huì)出錯(cuò),并搜索了幾個(gè)小時(shí)但無(wú)濟(jì)于事。為什么會(huì)出現(xiàn)這個(gè)錯(cuò)誤?有沒(méi)有辦法在沒(méi)有錯(cuò)誤的情況下執(zhí)行相同的操作?
根據(jù)文檔,一旦到達(dá)結(jié)果集末尾,mysqli_fetch_row
將返回 null
。
您可以使用foreach
循環(huán)。我不推薦它,但這是一個(gè)可能的解決方案。
foreach ($result->fetch_all() as [0 => $resultArray[]]); // no body needed
你真的不需要使用這個(gè)奇怪的裝置。您可以使用 array_column() 來(lái)實(shí)現(xiàn)更簡(jiǎn)單的操作。
$resultArray = array_column($result->fetch_all(), 0);
mysqli_fetch_row
將在某個(gè)時(shí)刻返回 null
(根據(jù)文檔,當(dāng)它用完要檢索的行時(shí),它總是會(huì)這樣做)。但是在嘗試讀取其第 0 個(gè)索引之前您沒(méi)有檢查它,因此會(huì)出現(xiàn)錯(cuò)誤。
許多人使用這種樣式檢索行:
while ($row = mysqli_fetch_row($result)) { $resultArray[] = $row[0]; }
這將避免此類問(wèn)題。這也是您在示例和文檔中經(jīng)常看到的完成方式。