PHP SQL WHERE名称IN(数组...)

时间:2016-02-01 17:16:43

标签: php mysql sql select where-in

我有一个数组:

scanFile()

输出:

$array = array ( option( 'one' ), option( 'two' ) );

和sql选择:

array(2) { [0]=> string(7) "result1" [1]=> string(7) "result2" } 

但输出是:

SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC

如果我将SELECT运行到mysql中,结果是正确的,但在php页面中无效。

2 个答案:

答案 0 :(得分:3)

如果$array中的值是字符串,那么您的查询语法无效。考虑一下:

$array = ['foo', 'bar'];
$q = "SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC";

结果查询将是:

SELECT * FROM xx WHERE url IN (foo, bar) ORDER BY id DESC

您需要:

SELECT * FROM xx WHERE url IN ("foo", "bar") ORDER BY id DESC

将内爆改为:

$q = "SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC";

请注意我添加的单引号,现在生成的查询将在IN子句中包含带引号的字符串:

SELECT * FROM xx WHERE url IN ('foo', 'bar') ORDER BY id DESC

话说回来,将字符串连接到查询中仍然容易受到SQL注入的攻击。您应该考虑学习准备好的陈述,并开始使用它们

答案 1 :(得分:2)

你忘记了一些引言:

SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC
                                          ^---^
                               ^-------------------------^

没有这些,你就会产生

 ... IN (one','two) ...

这是一个彻头彻尾的语法错误。而且由于你没有提到任何错误,你可能在代码中完全没有错误处理,只是假设成功 - 这正是错误的事情。