【问题标题】:Why i'm getting and error while sending email data to my database?为什么在将电子邮件数据发送到我的数据库时出现错误?
【发布时间】:2019-12-08 02:12:19
【问题描述】:

所以我的问题是我收到了这个错误:Uncaught Error: SQLITE_ERROR: near "@gmail": syntax error 当我在数据库中插入或更新时。

我正在使用 sqlite3 和电子。这是我的代码:

function addPatient(){
  var req = 'INSERT INTO patient(nom, prenom, age, tel, mail, sexe, paiement) VALUES('+li_nom.value+','+li_prenom.value+','+li_age.value+','+li_tel.value+','+li_mail.value+','+li_sexe.value+','+li_paiement.value+')';
  db.run(req);
  event.preventDefault();
  console.log("done");
}

PS:我正在从表单值中获取数据。

如果您需要更多信息,请随时询问。

感谢您的帮助:)

【问题讨论】:

  • req 的运行时值是多少?基本上,数据库告诉您 SQL 代码的语法无效。所以你下一步应该检查那个 SQL 代码,看看它是什么。
  • req 的运行时值是db.run(req) 上面的行。我想知道是不是今天早上出了问题,但我什么也没找到。
  • 这不是运行时值,而是生成运行时值的代码。例如,请注意"@gmail.com" 在该行上不存在。您的第一个调试步骤是检查您正在执行的 SQL 代码,而不是生成您正在执行的 SQL 代码的代码。您正在尝试解决问题,您应该做的最后一件事是假设代码行按预期工作而无需检查。
  • 哦好吧抱歉让我检查一下:)

标签: database electron syntax-error node-sqlite3


【解决方案1】:

您正在通过字符串连接创建 SQL 查询,这使其容易受到 SQL 注入和其他格式错误的查询的攻击。

当数据库接收到它时,您的查询基本上最终看起来像这样:

INSERT INTO patient(nom, prenom, age, tel, mail, sexe, paiement) VALUES(name,prename,25,555555555,example@gmail.com,male,500)

这里的问题:

  1. 需要在查询中引用字符串值
  2. @ 符号用于变量(当不是真实字符串的一部分或未引用时)

您需要使用参数化查询。这将解决这两个问题保护您免受几乎任何 SQL 注入。您在查询中创建占位符,然后通过库以编程方式设置它们。

【讨论】:

  • 所以如果理解得好,我必须这样做:INSERT INTO patient (nom, prenom, age, tel, mail, sexe, paiement) VALUES(${li_age.value},${li_age.tel},${li_age.mail},${li_age.sexe},${li_age.paiement}';
  • 那个答案使用参数化查询。它使用字符串插值,这与字符串连接一样对 SQL 注入开放。 @DreadLine:节点 sqlite3 库的文档包括如何在查询中使用参数的示例:sqlitetutorial.net/sqlite-nodejs/insert
  • 好的,伙计们,它的工作非常感谢您的帮助! :)
  • @DreadLine 是的,参数化查询对插入、更新和删除的工作方式相同
猜你喜欢
  • 2018-08-23
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多