代码之家  ›  专栏  ›  技术社区  ›  Michal Drozd

在mysql 5.x中,是否可以传递存储过程中的整个where条件?

  •  0
  • Michal Drozd  · 技术社区  · 14 年前

    我只需要通过条件,比如:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `productpricing2`(
       IN cond CHAR(200)
    )
    BEGIN
       SELECT * FROM tbl_products WHERE cond LIMIT 1;
    END
    

    就像这样称呼它:

    CALL productpricing2("productName IS NOT NULL");
    

    其中producture是表tbl_products中的列

    谢谢

    2 回复  |  直到 14 年前
        1
  •  1
  •   canni    14 年前

    是的,你可以用 prepared-statements 对于它,并将整个查询构建为一个字符串,但这不是一种优雅的处理方法…

    另请注意:

    • 您的查询应该利用参数化的准备语句,以防SQL注入
    • 即使是参数化的准备好的语句,也不是完全“安全的”,您应该避免这种DB编程
        2
  •  1
  •   Mchl    14 年前

    是的,这是可能的(尽管正如hlgem指出的那样,它为SQL注入的可能性打开了大门)。

    这样做的方法是使用准备好的语句创建动态SQL。