![](/img/trans.png)
[英]Pass array to SQL Server Function/Stored Procedure using PHP 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.