React Native向MySQL插入哈希密码时遇JSON解析错误求助
问题分析与解决方案
你遇到的问题主要来自两个关键错误:SQL语法误用,以及MySQL函数的调用方式不对,最终导致服务器返回非JSON的错误内容,前端解析失败。
错误原因拆解
- SQL语法错误:你用了
INSERT INTO ... SELECT (?, ?, ?)的写法,但这种格式要求SELECT子句有合法的数据源(比如从另一个表查询数据),而你只是想插入单条记录,应该使用INSERT INTO ... VALUES的标准语法。 - MySQL函数调用错误:
SHA2(password, 512)是MySQL的内置函数,你把它放在参数数组里会被当成普通字符串传递给数据库,导致SQL执行时直接触发语法报错。正确的做法是直接在SQL语句中调用这个函数,而不是作为参数传入。
当这两个错误同时存在时,数据库执行失败,服务器返回的是HTML格式的错误页面(比如包含<html>标签的500错误页),而你的前端代码尝试把这个HTML内容解析成JSON,自然就会出现json parse error unrecognized token '<'的报错。
修正后的代码
connection.query( "INSERT INTO user(username, email, password) VALUES (?, ?, SHA2(?, 512))", [username, email, password], function (err, result) { if (err) { console.error("数据库插入错误详情:", err); // 建议添加日志便于调试 res.send({ 'success': false, 'message': '用户创建失败' }); } else{ res.send({ 'success': true, 'message': 'User created' }); } });
额外注意事项
- 永远不要在客户端处理密码哈希:确保密码哈希操作在服务器端完成,避免客户端泄露原始密码或哈希逻辑。
- 保留参数化查询:这里依然使用
?作为占位符,能有效防止SQL注入攻击,这一点做得很对。 - 添加错误日志:在回调中打印错误信息,方便你排查后续可能出现的数据库问题。
内容的提问来源于stack exchange,提问作者Bernardo
相关产品推荐
相关产品推荐

