You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax+jQuery+DataTables删除分类失效:提示成功但数据未删除

分类删除功能提示成功但数据库未删除的问题排查与修复

核心问题:SQL占位符与绑定参数不匹配

你的Model层mdlEliminarCategoria方法中,SQL语句的占位符定义错误,导致参数绑定失败,最终没有实际删除数据库记录:

// 错误的SQL语句
$stmt = Conexion::conectar()->prepare("DELETE FROM $table WHERE $nameId = :$id");

这里的:$id会被解析为:具体ID数值(比如:5),但后续绑定参数使用的是:$nameId(即:id_categoria),两者完全不匹配。SQL执行时没有匹配到任何行,但PDO的execute()会返回true(因为没有语法错误),所以方法返回"ok",前端收到后提示删除成功,但实际没有删除操作生效。

修复方法:修正SQL占位符

将SQL语句中的占位符改为与绑定参数一致的名称:

// 正确的SQL语句
$stmt = Conexion::conectar()->prepare("DELETE FROM $table WHERE $nameId = :$nameId");

此时占位符为:id_categoria,与bindParam(":".$nameId, $id, PDO::PARAM_INT)完全匹配,能正确绑定ID值并删除对应记录。

其他优化及完善点

  1. DataTable数据刷新:即使数据库删除成功,当前页面的DataTable不会自动更新,需在Ajax的success回调中添加刷新逻辑:
success: function(respuesta) {
    console.log(respuesta);
    if (respuesta == "ok") {
        Swal.fire(
            '¡Eliminado!',
            'La categoría ha sido eliminada.',
            'success'
        )
        // 替换为你的DataTable实例选择器
        $('#tuTablaCategorias').DataTable().ajax.reload();
    }
}
  1. 错误提示处理:当前前端未处理非"ok"的返回值,需补充错误提示逻辑:
success: function(respuesta) {
    console.log(respuesta);
    if (respuesta == "ok") {
        // 成功提示与表格刷新
    } else {
        Swal.fire(
            '¡Error!',
            respuesta,
            'error'
        )
    }
}
  1. 移除同步请求:async: false会阻塞浏览器主线程,建议删除该配置,使用异步请求的默认逻辑。
  2. 简化参数获取:JavaScript中$(this).attr("data-id")可替换为$(this).data("id"),与获取accion的方式保持一致,更简洁规范。

验证步骤

  1. 修复Model层SQL语句后,测试删除功能,查看数据库是否正确删除对应记录。
  2. 添加DataTable刷新代码,确认页面数据与数据库同步更新。
  3. 传入无效ID测试,验证错误提示是否正常触发。

内容的提问来源于stack exchange,提问作者Mateo Vélez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:08:10