SQL语句execute执行成功的判定:更新0行是否属于失败?
关于mysqli execute()方法执行成功的判定
首先纠正一个小误区:mysqli的execute()方法返回的是布尔值true/false,不是数字1/0(你可能是把返回值和其他场景混淆了)。
核心结论:execute()的成功只代表SQL语句被数据库服务器正常执行完成,和是否有行被修改/查询到数据完全无关。
具体来说:
- 返回
false的情况:数据库无法执行这条语句,比如SQL语法错误、数据库连接中断、没有操作该表的权限、表/字段不存在等,这类导致语句执行终止的错误场景。 - 返回
true的情况:只要数据库能正常处理这条语句,哪怕你的UPDATE语句没有匹配到任何行(比如你示例中id=5的记录不存在)、DELETE没删到数据、SELECT查不到结果,都属于执行成功,会返回true。
如果需要确认UPDATE是否真的修改了数据,不能只看execute()的返回值,要在它返回true后,调用$stmt->affected_rows来获取受影响的行数:
$result = $stmt->execute(); if ($result) { if ($stmt->affected_rows > 0) { // 有行被成功更新 } else { // 语句执行成功,但没有匹配到任何行,无更新操作 } } else { // 语句执行失败,比如语法错误、权限问题等 }
内容的提问来源于stack exchange,提问作者O'con
相关产品推荐
相关产品推荐

