我正在使用 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/