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

React Native向MySQL插入哈希密码时遇JSON解析错误求助

问题分析与解决方案

你遇到的问题主要来自两个关键错误:SQL语法误用,以及MySQL函数的调用方式不对,最终导致服务器返回非JSON的错误内容,前端解析失败。

错误原因拆解

  1. SQL语法错误:你用了INSERT INTO ... SELECT (?, ?, ?)的写法,但这种格式要求SELECT子句有合法的数据源(比如从另一个表查询数据),而你只是想插入单条记录,应该使用INSERT INTO ... VALUES的标准语法。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:17:51