简单的iPhone应用程序,根据用户选择的优惠券类别向用户显示优惠券列表。
我还没有对此进行测试,因为即使构建了界面,我还有很长的路要走 - 我只是想在我最终追逐一些疯狂的错误之前在这里检查我的方法。
- (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”是否会与“string”变量一起玩得很好?或者应该是“$ d”还是“@d”?
感谢任何可以看一眼并给我一个“看起来不错”或“你很糟糕”的人。
如果我吮吸,我会非常感谢您能阅读的链接!
答案 0 :(得分:0)
select * from table t where t.col1 = 5;
%d
实际上是指整数,因此您可能会得到奇怪的结果。我不打算查找char的正确格式,因为我认为这不是一个好方法。你应该真的使用绑定参数。要执行此操作,请使用当前具有%d
的问号定义查询。然后,在执行查询之前,您sqlite3_bind_int
要“填充”该字段。这样可以避免在使用字符串字段时出现SQL注入漏洞并具有一些性能优势(因为您可以提前做好所有准备工作)。