2016-05-12 120 views
3

未知列我有一个代码:SQL:在 'where子句'

$id=implode(",",$selected); 

$query = "SELECT u.id, p.brand, n.number FROM `user` u 
LEFT OUTER JOIN `phone` p ON u.id = p.id LEFT OUTER JOIN `number` n 
ON p.id = n.id WHERE u.id in ($id)"; 

其中$选择的是一个数组array(1,2,3)。但是当我运行它,它会出现这样的通知:

未知列“1”在“where子句”

如何处理这个问题?谢谢

+5

'回声$查询;'这是什么? –

+2

它给你'u.id in(1,2,3)'。在SQL中,通常数字被理解为列号,对于需要“1”,“2”,“3”的值,然后Hemant的答案在那里是有意义的。然后是McAdam的安全漏洞评论:你没有使用参数化查询。 – SparK

回答

1

在这里,你可以不喜欢它:

$id = implode("','",$selected); 

这个查询将运行:

$query = "SELECT u.id, p.brand, n.number FROM `user` u LEFT OUTER JOIN `phone` p ON u.id = p.id LEFT OUTER JOIN `number` n 
ON p.id = n.id WHERE u.id in ('$id')"; 
+0

我知道你试图演示如何使用'IN'子句,但是这对使用参数化查询尝试执行它的OP没有帮助。 – AdamMc331

+0

@ McAdam331它实际上对他有帮助,他的问题并没有在值的周围使用引号,所以'1'(第一个数组值)被解释为列名而不是值。据说,他应该考虑使用准备好的声明或至少对输入值进行消毒。 – Juan

+0

@Juan现在你已经向我解释了这个问题,但答案可能对于新手来说并不直观(因为它对我来说不直观),所以可以编辑它以解释这一点。 – AdamMc331