我想在 LIKE 运算符模式中使用命名参数占位符,以便正确转义参数字符串。
这是我使用 at-param 占位符修改后的代码:
var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE '%@search%';";
stmt.parameters["@search"] = "argument string";
stmt.execute();
这样做会产生一个带有以下详细信息的 SQLError
message: Error #3315: SQL Error.
details: '@search' parameter name(s) found in parameters property but not in the SQL specified
按照 Mike Petty 的建议,我尝试了:
stmt.text = 'SELECT * FROM comments WHERE title LIKE "@%search%";';
产生相同的 SQL 错误详细信息。
文档有这个:
expr ::= (column-name | expr) LIKE pattern
pattern ::= '[ string | % | _ ]'
我怀疑它是由于引用而被跳过的,关于如何让它工作有什么想法吗?
最佳答案
找到了一个解决方案,基本上不是这样的:
var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE '%@search%';";
stmt.parameters["@search"] = "argument string";
stmt.execute();
您必须为整个 LIKE 运算符模式放置一个占位符并将该模式绑定(bind)为参数。
var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE @search;";
stmt.parameters["@search"] = "%" + userInput + "%";
stmt.execute();
关于database - 如何在 Adobe Air 中的 LIKE 运算符模式中使用命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937110/