簡體   English   中英

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

解決了!

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

您無法通過數組在mysql中使用,請執行以下操作

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

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

根據我的經驗,像SELECT * FROM table1 WHERE column IN(?)這樣的查詢不起作用,您必須將IN值直接放在查詢中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM