我想在LIKE运算符模式中使用命名参数占位符,以便正确转义参数字符串。
这是我修改后的代码,我使用的是at-param占位符:
var stmt = new air.SQLStatement();
stmt.text =“SELECT * FROM comments WHERE title LIKE'%@ search%';”;
stmt.parameters [“@ search”] =“参数字符串”;
stmt.execute();
这样做会产生一个带有以下细节的SQLError
消息:错误#3315:SQL错误。
详细信息:'@search'参数名称在parameters属性中找到但在SQL指定的
中没有
根据Mike Petty的建议,我试过了:
stmt.text ='SELECT * FROM comments WHERE title LIKE“@%search%”;';
产生相同的SQL错误详细信息。
文档有:
expr :: =(column-name | expr)LIKE模式
pattern :: ='[string | %| _]'
我怀疑它是由于qoutes,有关如何使其工作的任何想法而被跳过?
答案 0 :(得分:4)
为此找到了一个解决方案,基本上不是这样做的:
var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE '%@search%';";
stmt.parameters["@search"] = "argument string";
stmt.execute();
您必须为整个LIKE运算符模式放置一个占位符,并将该模式绑定为参数。
var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE @search;";
stmt.parameters["@search"] = "%" + userInput + "%";
stmt.execute();
答案 1 :(得分:0)
从字符串中删除你的字符串。
像工作一样好:
SELECT * FROM comments WHERE comments.title LIKE '%string%';
答案 2 :(得分:0)
很难从你的问题中说出来,但你当前的声明是抛出SQLError,只是不编译,还是只是没有返回任何结果?
如果我不得不猜测我会说你在这里遇到一些问题:
即使文档和代码允许你使用冒号或符号,我的偏好是@,因为它更容易看到;)
不要忘记为行所期望的类添加一个itemClass定义 - 这有助于避免匿名对象。
这应该是相当直接的:
var stmt:SQLStatement = new SQLStatement();
stmt.itemClass = Comment;
stmt.text = 'SELECT * FROM comments WHERE title LIKE "@%search%";';
stmt.parameters['@search'] = userInput.text;
stmt.addEventListener(SQLEvent.RESULT, onResults);
stmt.execute();