天-海-蓝-蓝 2026-01-07 00:23 采纳率: 50%
浏览 1

删除数据时报错Microsoft JET Database Engine 错误 '80040e14' Syntax error (comma) in query expression 'id=340523,'.

一个很简单的SQL删除,以前好好的,不知道哪天动了哪里,忽然报这个错
Microsoft JET Database Engine 错误 '80040e14'

Syntax error (comma) in query expression 'id=340523,'.

原语句是
nowid_huiyuan=request("id_huiyuan")
set rs_selldate=conn.execute("select selldate from sell where id="&nowid_huiyuan&" order by id desc")

到网上找了半天,说哪里符号有问题,自己重写了,从别处复制了,页面编码换了GB2312 都会出这个错。仔细看那个错误提示,后面有一个“.”号,这个不知道是哪里来的,

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-01-07 00:24
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你遇到的错误是:

    Microsoft JET Database Engine 错误 '80040e14'
    Syntax error (comma) in query expression 'id=340523,'.

    这个错误通常是因为 SQL 语句中存在语法问题,特别是逗号或括号使用不当。从你的描述来看,错误提示中的 id=340523, 中多了一个逗号,说明在 SQL 查询字符串中出现了不应该存在的逗号。


    ✅ 一、问题分析

    你提供的代码片段如下:

    nowid_huiyuan=request("id_huiyuan")
    set rs_selldate=conn.execute("select selldate from sell where id="&nowid_huiyuan&" order by id desc")
    

    这里的问题可能出在以下几点:

    1. 变量 nowid_huiyuan 的值包含逗号

    如果 request("id_huiyuan") 的值中包含了逗号(例如 "340523,"),那么拼接后的 SQL 语句就会变成:

    select selldate from sell where id=340523,
    

    这显然会导致语法错误,因为 id=340523, 是一个不合法的条件表达式。

    2. SQL 注入风险

    直接拼接 SQL 字符串容易导致 SQL 注入攻击,建议使用参数化查询。

    3. 字符编码问题

    你说已经尝试了 GB2312 编码,但仍然报错,说明不是编码问题,而是 SQL 语句本身的问题。


    ✅ 二、解决方案

    1. 检查并清理输入值

    确保 nowid_huiyuan 的值没有多余的逗号或其他非法字符。

    nowid_huiyuan = request("id_huiyuan")
    nowid_huiyuan = Replace(nowid_huiyuan, ",", "") ' 去除所有逗号
    

    2. 使用参数化查询(推荐)

    避免 SQL 注入和语法错误的最佳方式是使用参数化查询。

    修改后的代码示例:

    Dim nowid_huiyuan
    nowid_huiyuan = request("id_huiyuan")
    
    ' 创建命令对象
    Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = conn
    cmd.CommandText = "SELECT selldate FROM sell WHERE id = ? ORDER BY id DESC"
    
    ' 添加参数
    cmd.Parameters.Append cmd.CreateParameter("id", adInteger, adParamInput, , nowid_huiyuan)
    
    ' 执行查询
    Set rs_selldate = cmd.Execute
    

    注意: 需要确保数据库连接支持 ADO 参数化查询,并且 adInteger 等常量已定义(如在 ASP 中需引用 ADO 库)。


    3. 验证 SQL 语句输出

    为了调试,可以在执行前打印出实际的 SQL 语句,检查是否有语法错误。

    Dim sqlQuery
    sqlQuery = "SELECT selldate FROM sell WHERE id=" & nowid_huiyuan & " ORDER BY id DESC"
    Response.Write "<pre>" & sqlQuery & "</pre>"
    

    ✅ 三、常见错误场景总结

    | 场景 | 原因 | 解决方案 | |------|------|----------| | 输入值包含逗号 | 变量值中包含逗号导致 SQL 语法错误 | 清理输入值,去除逗号 | | SQL 注入风险 | 直接拼接 SQL 字符串 | 使用参数化查询 | | 字符编码问题 | 数据库与页面编码不一致 | 确保统一使用 GB2312 或 UTF-8 | | SQL 语句拼接错误 | 拼接逻辑错误,导致多余符号 | 检查并修正 SQL 字符串拼接逻辑 |


    ✅ 四、最终建议

    强烈建议使用参数化查询来替代字符串拼接,这样可以有效防止 SQL 注入和语法错误。

    如果你无法使用参数化查询(例如在旧版 ASP 中),请务必确保输入值经过严格校验和清理,避免任何非法字符混入 SQL 语句中。


    ✅ 五、修改后的完整代码示例(安全版本)

    <%
    Dim nowid_huiyuan
    nowid_huiyuan = Request("id_huiyuan")
    
    ' 清理输入值,移除逗号等非法字符
    nowid_huiyuan = Replace(nowid_huiyuan, ",", "")
    
    ' 构造 SQL 语句
    Dim sqlQuery
    sqlQuery = "SELECT selldate FROM sell WHERE id=" & nowid_huiyuan & " ORDER BY id DESC"
    
    ' 输出 SQL 语句用于调试
    Response.Write "<pre>" & sqlQuery & "</pre>"
    
    ' 执行查询
    Set rs_selldate = conn.Execute(sqlQuery)
    %>
    

    如有更多上下文信息(如数据库类型、ASP 版本、是否使用 ADODB.Command 等),我可以提供更精确的解决方案。欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 1月7日