【问题标题】:How to use named parameters inside LIKE operator pattern in Adobe Air如何在 Adob​​e Air 的 LIKE 运算符模式中使用命名参数
【发布时间】:2012-06-11 19:41:09
【问题描述】:

我想在 LIKE 运算符模式中使用命名参数占位符,以便正确转义参数字符串。

这是我使用 at-param 占位符的修改代码:

var stmt = new air.SQLStatement();

stmt.text = "SELECT * FROM cmets WHERE title LIKE '%@search%';";

stmt.parameters["@search"] = "参数字符串";

stmt.execute();

这样做会产生带有以下详细信息的 SQLError

消息:错误 #3315:SQL 错误。

详细信息:在参数属性中找到“@search”参数名称,但不在指定的 SQL 中

按照 Mike Petty 的建议,我尝试了:

stmt.text = 'SELECT * FROM cmets WHERE title LIKE "@%search%";';

这会产生相同的 SQL 错误详细信息。

文档有这个:

expr ::= (column-name | expr) LIKE 模式

模式 ::= '[ 字符串 | % | _]'

我怀疑它是由于 qoutes 而被跳过的,关于如何使它工作的任何想法?

【问题讨论】:

    标签: database sqlite air adobe


    【解决方案1】:

    为此找到了解决方案,基本上不是这样:

    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();
    

    【讨论】:

    • 恭喜修复!如果可以,请确保将您的答案标记为“已接受”,以便其他人能够从您的成功中学习。干杯~
    【解决方案2】:

    很难从您的问题中看出,但是您当前的语句是抛出 SQLError,只是不编译,还是不返回任何结果?

    如果我不得不猜测,我会说你在这里有一些问题:

    1. 您不必限定 where 子句中的列,因为您只有 1 个表可供选择
    2. 参数 string 在技术上是 AIR / Actionscript 的保留字(尽管大小写不同) - 仍然有点混乱。

    尽管文档和代码允许您使用冒号或 at-symbol,但我更喜欢使用 @,因为它更容易看到 ;)

    不要忘记为行添加您期望的类的 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();
    

    【讨论】:

    • #1, #2 应该不是什么大问题,无论如何修改问题以避免混淆匿名对象现在应该没问题,稍后我会在找到 SQL 错误的解决方案后研究它谢谢!
    【解决方案3】:

    从你的字符串中删除你的 :string。

    Like 可以正常工作:

    SELECT * FROM comments WHERE comments.title LIKE '%string%';
    

    【讨论】:

    • 很抱歉,如果不清楚,出于安全考虑
    • 嗯,它确实有效:d.pr/i/Pz1I 你下载了 sql lite 浏览器/编辑器。丽塔还不错。丽塔:dehats.com/drupal/?q=node/58
    • 从来没有说过它不起作用,反正我已经编辑了我的问题,也许现在我想要实现的目标更清楚了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多