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

向MySQL MediumBlob字段插入图片时出现语法错误求助

向MySQL的MediumBlob字段插入图片时出现语法错误

我需要向MySQL的cover表中插入图片,该表包含多个字段,但仅在类型为MediumBlob的datafile字段插入图片时出现错误。

我的代码:

image = open(fileName, 'rb').read()  # 以二进制读取模式打开文件
#image = base64.b64encode(image)
#image_read = image.read()
conn, cursor = Functions.openDB(self, dbname='books')
mime = 'image/jpeg'
query = "UPDATE `cover` SET `datafile` = %s, WHERE idx = %s " % (image, idx )

try:
    cursor.execute(query)
    conn.commit()
except Error as e:
    Functions.handle_error(self, message=e)
    self.container.close()

错误信息:

Syntax error: near 'xffxd8xffxe0x00x10JFIFx00x01x01x01x00'x00'x00x00xffxdbx00Cx00' at line 1

无论直接读取二进制文件还是读取后进行Base64编码,都会出现语法错误,仅错误提示字符串有所不同。我在网上搜索到的基本都是类似上述的代码,但部分建议并不适用,原因如下:

  • 我遇到的是语法错误,推测是编码方式无法被MySQL识别导致的
  • 这些建议多针对字符串或整数操作,而我的问题是向Blob字段插入图片
  • 我所有数据库访问脚本的语法结构都是正确的

解决方法

问题根源有两个:一是直接用字符串格式化把二进制数据拼进SQL语句,二进制里的特殊字符会破坏SQL语法;二是原SQL语句中SET后面多了一个多余的逗号。

修改后的正确代码:

image = open(fileName, 'rb').read()  # 以二进制读取模式打开文件
conn, cursor = Functions.openDB(self, dbname='books')
# 移除多余逗号,使用参数占位符,不直接拼接数据到SQL
query = "UPDATE `cover` SET `datafile` = %s WHERE idx = %s"
try:
    # 将参数作为execute的第二个参数传入,让驱动自动处理转义
    cursor.execute(query, (image, idx))
    conn.commit()
except Error as e:
    Functions.handle_error(self, message=e)
    self.container.close()
finally:
    # 新增资源释放操作,避免连接泄漏
    cursor.close()
    conn.close()

关键注意事项:

  • 绝对不要用字符串格式化拼接SQL语句,既会引发语法错误,还存在SQL注入风险
  • 参数化查询会自动处理二进制数据的编码和转义,完美适配Blob字段的写入需求
  • 一定要检查SQL语句的语法细节,比如多余的逗号这类低级错误

内容的提问来源于stack exchange,提问作者Its Me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:18:13