2014-09-10 629 views
2

我有一个SQL过程,其中使用了一个IN语句。它是这样的:将一个数组作为参数传递给SQL过程

SELECT * FROM costumers WHERE id IN('1','2','12','14') 

我需要做的是在传递至IN statment作为参数,这是在PHP中的数组,值而不是硬编码。我怎样才能做到这一点?

+0

只需更换你的单引号封装变量与对你想要使用的数组键的引用$ myarray [0] – Alex 2014-09-10 14:01:16

回答

0

这应该做的伎俩

$array = array('1','2','12','14'); 

SELECT * FROM `costumers` WHERE `id` IN('{$array}'); 
1

您可以使用PHP函数Implode

$array = array("1","2","12","14"); 

$query = "SELECT * FROM costumers WHERE id IN(".implode(', ',$array).")" 
0

尝试内爆PHP到一个数组,然后插值该字符串到SQL语句:

$arr = array('foo', 'bar', 'baz'); 
$string = implode(", ", $arr); 

SELECT * FROM customers WHERE id in ($string); 
2

你可以在这种情况下崩溃:

$array = array('1','2','12','14'); 
$ids = "'".implode("','", $array) . "'"; 
$sql = "SELECT * FROM `costumers` WHERE `id` IN($ids)"; 
echo $sql; 
// SELECT * FROM `costumers` WHERE `id` IN('1','2','12','14') 

,或者如果你不希望任何报价:

$ids = implode(",", $array); 
0

使用PHP的join功能的加入数组的值。

$arr = array(1,2,12,14); 

$sql = "SELECT * FROM costumers WHERE id IN(" . join($arr, ',') . ")"; 
+0

'join'和'implode'实际上是一样的,我更喜欢'join',但是这里的其他人似乎更喜欢implode。 (有什么区别? - [http://stackoverflow.com/questions/17914008/what-is-the-difference-between-implode-join] – davur 2014-09-10 14:09:47

+0

我更喜欢'implode'以便轻松区分它与SQL'JOIN'并且它也更容易被识别为'explode'的补充功能。 – 2014-09-10 14:29:03

+0

有效的理由@ rink.attendant.6。我喜欢的原因是'join'是其他语言(不包括SQL)的此函数的更普遍的名称,如C#,Perl,Python,Java,Javascript等。 - implode/explode几乎是PHP独有的。 – davur 2014-09-11 02:12:32

1

implode()是正确的功能,但您还必须注意数据的类型。

如果字段为数值,这很简单:

$values = array(1. 2, 5); 
$queryPattern = 'SELECT * FROM costumers WHERE id IN(%s)'; 
$query = sprintf($queryPattern, implode(', ',$values)); 

但如果它是一个字符串,你必须用单引号和双引号玩:

$values = array("foo","bar","baz"); 
$queryPattern = 'SELECT * FROM costumers WHERE id IN("%s")'; 
$query = sprintf($queryPattern, implode('", "',$values)); 
相关问题