将缓冲区数组插入 mysql 但它有无效字符

问题描述

我正在尝试使用 React.js 将图像插入到 MysqL 表中。 MysqL 表由 3 列构成;设备:字符串,名称:字符串,图像:longBlob。图像可能需要不同的数据类型?我已经在我的 React 应用程序中正确检索了图像作为缓冲区,并且数据在 React 应用程序中看起来像这样......

<Buffer ff d8 ff e1 02 b7 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 09 01 03 
00 03 00 00 00 01 00 06 00 00 01 00 00 04 00 00 00 01 00 00 02 a3 01 10 00 02 ... 57470 more bytes>

当我像这样使用我的 sql 插入语句时,

"UPDATE deviceImage SET name='" + name + "',data='" + data + "'  WHERE device='000209'"

数据变量改变形式,有很多无效字符,如{、[和$。当缓冲区有这些字符时,如何正确插入它?

如果我把它打印到控制台,sql 语句看起来像这样...

UPDATE deviceImage SET name='006.JPEG',data='����☻�ExifMM*     ☺♥♥☺♠☺♦☺☻�☺►☻  ♥�☺☼�☺1☻♫��i♦☺�☺↕♦☺☺2☻¶�SM-G970UsamsungG970USQU5GUCG2021:05:23 18:51:06§�☻♣☺☺��☻☺��♦
☺☺��"♥☺☻�☺♥☺☺� ☻♀☺Ē♣♣☺☺Ј'♥☺☺@�♣♥☺→�♥
☺☺ؐ♥☻¶☺�♦♣☺☺��♥♥☺�♦☻¶☺��♥☺☻�☻♥☺�
♣☺☻►��♣☺☻↑�     ♥☺♥☺��♣☺☻ td0220dL12XLLD00SM�d......

所以,数据变量从一个缓冲区数组进入这个东西,它有无效的字符。

解决方法

这花了我一点时间才找到,但答案是简单地避免在我的 sql 查询中进行字符串连接,无论如何你都不应该这样做。这是解决了我的问题的正确查询。

let sql = "UPDATE deviceImage SET name=?,image=? WHERE device='000209'"
dbUser.query(sql,[name,data],(err,result) => {
    res.send(result)
    res.end()
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...