Php 将数组作为参数传递给SQL过程

Php 将数组作为参数传递给SQL过程,php,mysql,sql,Php,Mysql,Sql,我有一个SQL过程,在这个过程中我使用了一个in语句。事情是这样的: SELECT * FROM costumers WHERE id IN('1','2','12','14') 我需要做的是将值作为参数传递给in statment,它是php中的一个数组,而不是硬编码的。我该怎么做 这应该能奏效 $array = array('1','2','12','14'); SELECT * FROM `costumers` WHERE `id` IN('{$array}'); 您可以使用PHP函

我有一个SQL过程,在这个过程中我使用了一个in语句。事情是这样的:

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

我需要做的是将值作为参数传递给in statment,它是php中的一个数组,而不是硬编码的。我该怎么做

这应该能奏效

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

SELECT * FROM `costumers` WHERE `id` IN('{$array}');
您可以使用PHP函数


尝试将php内插到数组中,然后将该字符串插入SQL语句:

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

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

在这种情况下,您可能会内爆:

$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);
使用PHP的连接函数连接数组的值

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

$sql = "SELECT * FROM costumers WHERE id IN(" . join($arr, ',') . ")";
是正确的函数,但您还必须注意数据的类型

如果字段为数字,则很简单:

$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));

只需将单引号替换为对要使用的数组键的引用即可封装变量,即$myarray[0]连接和内爆实际上是相同的,我更喜欢连接,但这里的其他人似乎更喜欢内爆。有什么区别-[我更喜欢内爆,以便于将其与SQL JOIN区分开来,也更容易将其识别为explode的补充函数。一个有效的理由@rink.attendant.6.我之所以喜欢内爆,是因为在SQL排除在外的其他语言(如C、Perl、Python、Java、Javascript等)中,JOIN是该函数更常见的名称。-内爆/explode几乎是PHP所独有的。
$values = array("foo","bar","baz");
$queryPattern = 'SELECT * FROM costumers WHERE id IN("%s")';
$query = sprintf($queryPattern, implode('", "',$values));