2011-05-10 76 views
0

简单的iPhone应用程序,基于他们选择的优惠券类别向用户显示优惠券列表。需要对我的SQLite查询进行完整性检查吗?

我还没有测试过,因为即使建立了界面,我仍然还有很长的路要走 - 我只是想在我最终追寻几天疯狂的错误之前,在这里理智地检查我的方法。

- (BBSelectedCoupons *)BBSelectedCoupons:(char)SelectedCategory { 
    BBCouponDetails *retval = nil; 
    NSString *query = [NSString stringWithFormat:@"SELECT id, MerchantName, ShortDeal 
    FROM coupons JOIN SelectedCategory ON coupons.CouponID=SelectedCategory.CouponID 
    ORDER BY id ASC WHERE SelectedCategory=%d", SelectedCategory]; 

我的问题如下:

1)在1号线,我是获准使用(焦炭),因为我有吗?我见过的例子只使用(int)。

2)在第4行和第5行,我使用了“SelectedCategory”这个词两次 - 一次是在JOIN之后引用表,第二个引用第二个表,这是测试的一部分。然后,在WHERE之后,我只定义了一次“SelectedCategory” - 是否正常工作?我正在计划基于用户点击的按钮定义“SelectedCategory”。

3)在第5行,“%d”会对“字符串”变量起到很好的作用吗?还是应该像“$ d”或“@d”一样?

感谢任何人可以看看,给我一个“看起来不错”或“你吸”。

如果我吸了,我可以阅读的链接将非常感谢!

回答

0
  1. 当然,为什么不呢?
  2. 您可以使用简称来消歧。使用一个简短的例子:select * from table t where t.col1 = 5;
  3. %d确实指的是一个整数,所以你可能会得到奇怪的结果。我不打算查找字符的正确格式,因为我不认为这是一个好方法。你应该真的在使用绑定参数。要做到这一点,你可以在当前有%d的地方用问号定义查询。然后在执行查询之前,您需要“填充”该字段。这避免了在使用字符串字段时的SQL注入攻击并具有一些性能优势(因为您可以提前做好所有准备工作)。