简体   繁体   English

PDO将数组传递到存储过程

[英]PDO pass array into stored procedure

How can I pass array into: 如何将数组传递给:

$query = 'CALL myStoredProcedure(:array)'

to use it in IN clause of that stored procedure? 在该存储过程的IN子句中使用它?

BTW: its not duplicate. 顺便说一句:它不是重复的。 Passing array into stored procedure is NOT EQUAL to passing array into SELECT query directly. 将数组传递到存储过程中并不等同于直接将数组传递到SELECT查询中。 So duplicate mark is wrong. 因此重复标记是错误的。 I can pass array as a set of (?,?,?,?,?) but how should i call unknown count of parameters inside IN clause? 我可以将数组作为一组(?,?,?,?,?)传递,但是如何调用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);

Solved! 解决了!

PHP: 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);

STORED PROCEDURE: 存储过程:

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

You can't pass array to use in mysql, do something like 您无法通过数组在mysql中使用,请执行以下操作

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

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

And from my experience queries like SELECT * FROM table1 WHERE column IN(?) don't work you have to put the IN values directly in the query 根据我的经验,像SELECT * FROM table1 WHERE column IN(?)这样的查询不起作用,您必须将IN值直接放在查询中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM