首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 常見錯誤提示含義速查表:從 Notice 到 Fatal Error 全覆蓋

     編輯:PHP 相關知識

PHP 常見錯誤提示含義速查表:從 Notice 到 Fatal Error 全覆蓋

開發中遭遇報錯別慌,錯誤信息其實已經告訴你「哪裡錯、為什麼錯、怎麼改」。本文整理 17 類高頻錯誤,附帶原因分析與修復模式,建議收藏備查。

速查總表

#錯誤輸出關鍵字核心原因典型修復
1Notice: Undefined variable: xxx使用未定義變量先 isset()/?? 判斷,或初始化默認值
2Parse error: syntax error, unexpected 'else' (T_ELSE)if...elseif...else 結構錯誤 (如 if(){ }else if(){ } echo 1; else{ })檢查大括號配對、elseif 不能拆行、中間不可有輸出語句
3Parse error: syntax error, unexpected end of file大括號 {} 不匹配 (少寫 })IDE 自動縮進/括號高亮、逐段註釋定位
4Parse error: syntax error, unexpected 'string' (T_STRING)語句末尾漏分號 ;養成每行結尾加分號習慣
5Warning: Invalid argument supplied for foreach()foreach 參數非數組/Traversable (如 null、false、標量)is_array() 或 (array) 強制轉換前判斷
6Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resourceSQL 執行失敗返回 false,未判斷直接取數據$res = mysqli_query(...) or die(mysqli_error($conn)); 必檢查
7No database selected連接成功但未選庫mysqli_select_db($conn, $dbname) 或 DSN 帶 dbname=xxx
8Access denied for user 'root'@'localhost' (using password: YES)用戶名/密碼錯、主機不匹配、權限不足檢查 user 表 host 欄、FLUSH PRIVILEGES、密碼策略
9Unknown database 'xxx'數據庫不存在創建庫、檢查拼寫、確認連接參數
10Table 'db.table' doesn't exist表不存在執行建表 SQL、檢查大小寫敏感 (Linux 區分)
11Unknown column 'abc' in 'field list'字段不存在檢查表結構 DESC table、遷移腳本是否執行
12Column count doesn't match value count at row 1INSERT 字段數與值數不一致顯式寫字段名 INSERT INTO t(a,b) VALUES(1,2)
13Warning: Wrong parameter count for func()函數調用參數個數不匹配定義檢查函數簽名、可選參數默認值
14Smarty error: 'foreach: item' must be a variable name模板 {foreach $arr as $item} 寫成 {foreach $arr as item} (漏 $)模板變量必須帶 $ 符號
15Smarty error: unrecognized tag: msg.message_id模板變量漏 $ (如 {$msg.message_id} 寫成 {msg.message_id})同 14
16Smarty error: unable to read resource: "xxx.tpl"模板文件路徑錯、未放入模板目錄、權限不足檢查 $smarty->template_dir、文件是否存在
17Fatal error: Cannot redeclare func()同名函數/類重複定義用 include_once/require_once、PSR-4 自動載入、命名空間隔離

錯誤級別與處理策略

級別嚴重度腳本行為建議
E_NOTICE / E_WARNING低/中繼續執行開發環境全顯示,生產環境記錄日誌,代碼修復消除
E_ERROR / E_PARSE / E_CORE_ERROR致命立即終止必須修復,上線前零容忍
E_RECOVERABLE_ERROR可捕獲致命若無處理器則終止set_error_handler 捕獲並轉為異常

調試三板斧

  1. 看行號:錯誤輸出含 in /path/file.php on line 42,直接定位。
  2. 看上下文:IDE 打開該行,檢查前後 10 行變量賦值、條件判斷、函數調用。
  3. 加日志/斷點:error_log(print_r($var, true))、Xdebug 斷點單步跟蹤。

預防清單

  • 開啟 error_reporting(E_ALL) + display_errors=On (開發)。
  • 使用 declare(strict_types=1) + 類型聲明,編譯期攔截類型錯誤。
  • 佈署 PHP_CodeSniffer (PSR-12) + PHPStan/Psalm 靜態分析,CI 攔截低級錯誤。
  • 模板引擎嚴格模式:$smarty->strict_mode = true。

錯誤是編譯器/解釋器送給開發者的「精準定位提示」,讀懂它、修好它、防住它,是從「寫出能跑的代碼」到「寫出健壯代碼」的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved