javascript - 如何对 cartodb 数据库中 javascript/jquery 生成的查询转义 SQL 查询的单引号?

标签 javascript jquery sql

我正在使用 javascript/jquery 生成 SQL 查询。 我有一个正在 javascript/jquery 脚本中生成和使用的 sql 查询。

类似这样的事情:

var storeName;
var query = "SELECT * FROM stores where storeName = '" + storeName + "';";

(storeName是当用户从html中选择时通过jquery生成的)

因此,当 storeName 类似于 “Jackson Deli” 时,查询运行得很好。

但是当storeName“Jackson's Deli”时,它不起作用,这似乎是因为Jackson's 中的撇号被视为收盘报价。我知道如果我对查询进行硬编码,我可以通过加倍来转义引用...所以

SELECT * FROM stores where storeName = 'Jackson''s Deli'; 

应该可以工作。但我没有对查询进行硬编码。相反,它是由用户输入生成的,名称中可能有或没有撇号。在这种情况下,我将如何转义 ' 这个字符?我需要它在 Javascript/jquery 中工作。

我是否需要编写一个 if 语句来在 storeName 中查找 ' 并将其替换为 '' ? 或者还有其他方法可以解决这个问题吗?

编辑: 哎哟!通常,是的,我意识到在客户端生成查询的危险。
这里有更多背景信息。我正在与 cartodb 合作并遵循他们的文档。这是他们的存储库中的一个示例,其功能与我正在讨论的类似(他们也有其他示例):

https://github.com/CartoDB/cartodb.js/blob/develop/examples/layer_selector.html

您无法在 cartodb 中运行允许您以任何方式修改数据的查询 - 您只能运行允许您检索数据的查询。所以我仍在考虑转义这个引号字符的最佳方法是什么。

最佳答案

永远不要在客户端生成 SQL...

话虽如此,如果您要使用动态查询,最好转义用户输入并将其绑定(bind)到服务器端的准备好的语句。

如果您发布有关哪个数据库(MySQL、Postgres 等)以及用于服务器处理的语言的更多详细信息,您将得到更好的答案。

是的...我完全知道这并不能回答问题。但没有人应该以这种方式创建代码。

编辑:将警告放大以强调。

关于javascript - 如何对 cartodb 数据库中 javascript/jquery 生成的查询转义 SQL 查询的单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18660233/

相关文章:

javascript - Flexigrid 仅显示 30 条记录

javascript - 为什么这个高度匹配功能不能正常工作?

javascript - 动态 ajax 填充表在 IE 8 中不起作用

mysql - SQL 新手 - 需要查询方面的帮助

javascript - 如何防止 JavaScript 中的原型(prototype)污染

javascript - 防止多次点击 .click()

javascript - 玩笑或普通 JS 单元测试库中的 mockjax 等效项(例如 Karma Jasmine )

javascript - files.length 在 Internet Explorer 中未定义

mysql - 如何连接两个表以获得 where 查询的计数

sql - 从众多 Excel 文件中提取到一个数据表或文件