PHP表单提交本身不抛异常,捕获异常需在数据库操作、API调用等明确throw处;容错关键在前置过滤(如filter_input)、状态检查(如$_FILES[‘error’])和分层防御。
PHP表单提交时根本捕不到异常?因为大多数错误不是Exception
PHP 表单提交本身($_POST 或 $_GET 接收)不会抛出 Exception,所以直接套 try...catch 包裹 $_POST['username'] 是无效的。真正需要容错的环节是:数据校验失败、数据库写入报错、文件上传异常、第三方 API 调用超时等。
常见误判现象:Notice: Undefined index: email 这类是 PHP 警告(E_NOTICE),不是异常,try 捕不到;必须用 isset()、filter_input() 或错误抑制符 @(不推荐)提前防御。
- 表单接收阶段:用
filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL)替代裸读$_POST['email'] - 数据库操作阶段:PDO 默认不抛异常,需显式设置
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) - 文件上传阶段:检查
$_FILES['avatar']['error'] === UPLOAD_ERR_OK,而不是依赖try
什么时候该用 try…catch?只在明确可能 throw Exception 的地方
比如 PDO 插入失败、cURL 请求失败、JSON 解析出错、自定义验证类主动 throw new InvalidArgumentException()。这些才是 try...catch 的合法使用场景。
示例:插入用户前未开启 PDO 异常模式,execute() 失败只会返回 false,catch 完全无用:
立即学习“PHP免费学习笔记(深入)”;