【问题标题】:FMDB and LIKE clauseFMDB 和 LIKE 子句
【发布时间】:2012-03-15 08:31:07
【问题描述】:

我无法让 iOS 的 FMDB 包装器使用参数和 LIKE 子句。事实上,我很难让 LIKE 子句在带有 FMDB 的 SQLite 上工作。

我尝试使用 `Name LIKE '%dam%' 来匹配“Adam”,并且尝试将其指定为如下参数,但没有任何效果。

    [buffer appendString:@" Name LIKE '%dam%' "]; // no results

    [buffer appendString:@" Name LIKE ? "];
    [params addObject:[NSString stringWithFormat:@"%%%@%%", args.name]]; // no results

    [buffer appendString:@" Name LIKE '%' ? '%' "];
    [params addObject:[NSString stringWithFormat:@"%%%@%%", args.name]]; // no results

表中肯定有符合条件的项目,我只是不明白为什么 FMDB 没有返回它们。

【问题讨论】:

    标签: objective-c ios sqlite parameters fmdb


    【解决方案1】:

    您也可以尝试使用常规 SQL 查询将数据提取到 FMResultset。这对我来说很好。

    如果您稍后需要过滤数据,请使用 NSPredicate 效果很好。

    NSPredicate 文档

    predicate =
    [NSPredicate predicateWithFormat:@"authors.lastName CONTAINS %@", @"Mark" ];
    filtered  = [bookshelf filteredArrayUsingPredicate:predicate];
    

    【讨论】:

    • 我听说过objective-c中预测的坏意见。这个数据库通常还包含多达 10000 个项目,我需要一次将结果分页到 30 条记录,所以这不起作用。我更愿意让它真正与 FMDB 一起工作,因为它应该是可能的。
    【解决方案2】:

    有一天也头疼。试试这个

    [buffer appendString:[NSString stringWithFormat:@" Name LIKE '%@dam%@' ",@"%",@"%"];
    

    【讨论】:

    • 据我所知,使用 SQLite 转义参数没有简单的方法。这不是特定的 FMDB 问题。不过,您的代码不会真正采取任何措施来防止 SQL 注入。
    • 如果你想知道关于 sqlite 注入的答案 - 发布另一个问题。
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2012-12-23
    • 2017-08-30
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2014-09-01
    相关资源
    最近更新 更多