【问题标题】:Escape single quote using fireSQL使用 fireSQL 转义单引号
【发布时间】:2019-11-29 05:40:54
【问题描述】:

我在我的 Angular 项目中使用 Firebase Firestore,最近有一个名为 fireSQL 的项目在 Firestore 中使用 SQL 语句查询,它工作得很好,但是当我尝试选择我的值有单引号的东西时,它只会发送一个错误。我尝试使用所有 JavaScript 技术来逃避,但没有任何反应。

错误信息

错误

对象 { 消息:“预期 \"!=\", \"%\", \"*\", \"+\", \"-\", \"/\", \"\"、\"=\"、\">\"、\">=\"、\"AND\"、\"GROUP\" , \"LIMIT\"、\"OR\"、\"ORDER\"、\"UNION\"、WHITE_SPACE 或输入结束 但是找到了“s”。”,预期:(​​29)[…],找到:“s”,位置:{…}, 名称:“语法错误”,堆栈:“”}

查询是

getBrandfromSub(brand, sub) {
    const fireSQL = new FireSQL(firebase.firestore());
    return fireSQL.rxQuery(`SELECT * FROM products WHERE brand = '${brand}' AND subcategory = '${sub}'`);
  }

【问题讨论】:

  • 这个问题不能解决您的问题,但您使用的查询肯定必须将字符串传递给rxQuery?否则它甚至不会编译。 fireSQL.rxQuery(`SELECT * FROM products WHERE brand = ${brand} AND subcategory = ${sub}`);
  • @Collierre 感谢您的快速回放,是的,它应该使用 rxQuery 从 firestore 数据库中获取数据。
  • 是的,但我的意思是您发布的代码不能是您正在使用的实际代码,因为您没有将字符串参数传递给rxQuery。您发布的代码是否与您实际使用的代码完全相同?还是看起来像我评论中的代码?
  • 我用我的代码更新了帖子。

标签: angular typescript firebase google-cloud-firestore angularfire


【解决方案1】:

您需要对作为 SQL 查询发送的字符串中的单引号进行转义。 FireSQL source 表示\\'' 的转义序列。因此,您的代码可以执行以下操作。 (如果您需要转义其他特殊字符,则需要将它们添加到 escapeSingleQuotes() 方法中。)

getBrandfromSub(brand, sub) {
  const fireSQL = new FireSQL(firebase.firestore());
  return fireSQL.rxQuery(`SELECT * FROM products WHERE brand = '${this.escapeSingleQuotes(brand)}' AND subcategory = '${this.escapeSingleQuotes(sub)}'`);
}

escapeSingleQuotes(s: string) {
  return s.replace("'", "\\'");
}

【讨论】:

  • 同样的问题和同样的错误信息我之前也用过这个方法和反斜杠方法但是结果一样。
  • ' 之前使用两个反斜杠怎么样? FireSQL 源表明\\'' 的转义版本。 github.com/jsayol/FireSQL/blob/master/src/sql-parser/…
  • 我以前用过,现在重新用过,但同样的问题。
  • 我添加 \\' 然后我用 CTRL + SHIFT + R 刷新页面以重新加载缓存并且它工作
猜你喜欢
  • 2015-01-10
  • 2012-07-18
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
相关资源
最近更新 更多