将数组传递给存储过程

时间:2009-02-27 16:06:00

标签: php mysql stored-procedures

我试图将一组值从php传递给mysql存储过程作为参数列表以及如何在存储过程中使用该数组。程序中的查询中有三个IN语句,所以我想做IN(@listOfids)其中@listOfids是1,2,3,4(来自php的内爆数组)。

3 个答案:

答案 0 :(得分:5)

所以我得到了一个解决方法,即连接查询和参数,以便伪代码

CREATE PROCEDURE `related_stories`(IN param1 VARCHAR(255), IN param2 VARCHAR(255), IN param3 VARCHAR(255), IN publishDate INT(11), IN tlimit INT(11))
BEGIN

SET  @query =CONCAT( '

select s.* from 
(

select * from 
(
 SELECT something where condition IN (',param1,')
) as table1

UNION ALL

select * from 
(
 SELECT something where condition IN (',param2,')
) as table2

UNION ALL

select * from 
(
 SELECT something where condition IN (',param3,')
) as table3

) as s

WHERE (s.publish_date < ',publishDate,') 
GROUP BY id limit ',tlimit,';');

PREPARE stmtInsert FROM @query;
EXECUTE stmtInsert;

END

param1,param2,param3是通过php传递的内爆数组,例如('1,2,3,4')。希望这有助于某人

答案 1 :(得分:1)

我认为这里的主要问题是MySQL不支持数组作为数据类型。您需要与另一个表形成one-to-many关系,该表包含返回主数据和数组数据的外键。

答案 2 :(得分:0)

我认为你必须把它作为csv传递。 Mysql对循环不是很友好,所以你可能最好在外面做它。至于存储过程语言,我发现Mysql确实缺乏。