PDO 将数组传递给存储过程

PDO pass array into stored procedure

如何将数组传递给:

$query = 'CALL myStoredProcedure(:array)'

要在该存储过程的 IN 子句中使用它?

顺便说一句:它不是重复的。将数组传递到存储过程不等于将数组直接传递到 SELECT 查询。所以重复标记是错误的。我可以将数组作为一组 (?,?,?,?,?) 传递,但是我应该如何在 IN 子句中调用未知数量的参数?

$params = array(1, 21, 63, 171);
$place_holders = implode(',', array_fill(0, count($params), '?'));
$sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);

您不能传递数组以在 mysql 中使用,请执行类似

的操作
$array  = implode(',',$array);

$query  = "CALL myStoredProcedure($array)";

根据我的经验,像 SELECT * FROM table1 WHERE column IN(?) 这样的查询不起作用,您必须将 IN 值直接放在查询中

已解决!

PHP:

$params = implode(',', $array);//string arrays should escape each element with quotes
$stmt = $db->prepare('CALL myProcedure(:array)');
$stmt->bindParam(':array', $params, PDO::PARAM_STR);

存储过程:

CREATE PROCEDURE `myProcedure`(IN `array` VARCHAR(2048))
#VARCHAR(2048) - maximum expected total length of imploded array
BEGIN
SET @query:= CONCAT(
'SELECT
    *
FROM
    `some` AS `table`
WHERE
    `table`.`field` IN (',`array`,')');
PREPARE stmt FROM @query;
EXECUTE stmt;
END