PHP 編譯器遇到第一個錯誤即停止,報告該行(或看似無關的行)。錯誤行號往往具有誤導性,因為編譯器需解析多行才能確認語法無效。
Parse error: parse error, unexpected T_IF in script.php on line 4
真相:錯誤通常在 前一行。unexpected T_XXX 表示編譯器在不該出現預保留字(if/while/for...)的位置看到了它。
典型原因:
{} 不匹配(函數/迴圈未閉合)範例:
<?php
$b = "somevalue" // 第 2 行缺分號
if($b == "somevalue"){ // 第 3 行
print "Hello";
}
// 編譯器報錯:line 4 unexpected T_IF(實際指向 if 那行)
function Useless() {
for($i=0;$i<10;$i++) {
} // 少了函數的右大括號
}
// 錯誤:Parse error: unexpected $end in script.php on line 9(文件最後一行)
對策:縮排對齊、使用支援括號匹配高亮的編輯器(VS Code、PhpStorm、Sublime、Notepad++),養成「寫左括號即寫右括號」習慣。
Warning: Supplied argument is not a valid MySQL result resource in ...
發生行:通常是 while($row = mysql_fetch_array($result))
根因:$result 不是有效結果資源,因為 mysql_query() 失敗。兩大原因:
防禦性寫法:
$result = mysql_query($sql) or die("Query failed: " . mysql_error() . " SQL: $sql");
除錯是開發者最核心技能。理解錯誤訊息真實含義、建立預防習慣、善用工具,能將除錯時間從「小時」壓縮到「分鐘」,大幅提升交付速度與心智負擔。