代码之家  ›  专栏  ›  技术社区  ›  Akeem

将数组传递到存储过程中

  •  7
  • Akeem  · 技术社区  · 15 年前

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

    3 回复  |  直到 11 年前
        1
  •  5
  •   Akeem    15 年前

    所以我找到了一个解决方法,将查询和参数连接起来,这样就可以生成伪代码

    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')。希望这对别人有帮助

        2
  •  1
  •   Henrik Paul    15 年前

    我认为这里的主要问题是MySQL不支持数组作为数据类型。你需要组成一个团队 one-to-many

        3
  •  0
  •   Andrew Clark    15 年前