2015-05-18 51 views
-1

我如何传递数组到:PDO通数组存储过程

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

回答

1

已解决!

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 
0

你不能传递数组在MySQL中使用,这样做

$array = implode(',',$array); 

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

而且从我的经验,查询,如SELECT * FROM table1 WHERE column IN(?)不工作,你必须直接把IN值查询