在ThinkPHP3.2中捕获订单数据插入错误,可以通过以下步骤实现:
步骤说明
实例化模型:使用
M()
函数快速实例化订单模型。准备数据:构造要插入的订单数据数组。
插入数据:调用
add()
方法插入数据,并获取返回值。错误判断:根据返回值判断是否插入成功,失败时获取详细错误信息。
处理错误:记录日志或返回错误信息,确保生产环境不暴露敏感信息。
示例代码
// 实例化订单模型 $Order = M('Order'); // 构造订单数据 $data = array( 'order_no' => '20231001123456', 'user_id' => 1001, 'amount' => 99.99, // 其他字段... ); // 插入数据 $result = $Order->add($data); if ($result) { // 插入成功,$result为插入的主键ID echo '订单创建成功,订单ID:' . $result; } else { // 插入失败,获取模型错误信息 $error = $Order->getError(); // 或获取数据库错误信息(更详细) $dbError = $Order->getDbError(); // 记录错误日志(实际开发中建议使用日志函数) Log::write('订单插入失败:' . $dbError, 'ERROR'); // 返回错误信息(生产环境应避免直接输出) echo '订单创建失败,错误原因:' . $dbError; }
关键点解析
返回值判断:
add()
成功返回主键ID,失败返回false
,据此判断是否插入成功。错误信息获取:
getError()
:获取模型层的错误信息(如自动验证失败)。getDbError()
:获取数据库层面的详细错误(如SQL语法错误、约束冲突)。日志记录:使用
Log::write()
记录错误,便于后续排查,避免用户看到敏感信息。事务处理(可选):若涉及多表操作,可加入事务确保数据一致性:
$Order->startTrans(); // 开启事务 try { // 插入订单 $orderId = $Order->add($data); if (!$orderId) { throw new Exception('订单插入失败'); } // 其他操作(如更新库存) $Inventory = M('Inventory'); $updateResult = $Inventory->where('product_id=1')->setDec('stock'); if (!$updateResult) { throw new Exception('库存更新失败'); } $Order->commit(); // 提交事务 echo '操作成功'; } catch (Exception $e) { $Order->rollback(); // 回滚事务 Log::write('事务失败:' . $e->getMessage(), 'ERROR'); echo '操作失败:' . $e->getMessage(); }
相关文章