问题描述
我正在尝试使用 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()
})