【问题标题】:Mysql Prepared Statement using same parameter multiple timesMysql Prepared Statement 多次使用相同的参数
【发布时间】:2012-11-07 05:36:46
【问题描述】:

我这样写存储过程:

  DELIMITER $$
   CREATE PROCEDURE searchByTerm(term VARCHAR(300))
    BEGIN
    SET @statment = "Select name,description from products where name like '%?%' OR description like '%?%'";
    PREPARE stmt FROM @statment;
    SET @a = term;
    SET @b = term;
    EXECUTE stmt USING @a,@b;
    DEALLOCATE PREPARE stmt; 
  END$$

称之为:

CALL searchByTerm('xyz');

它会导致以下错误:

Error Code : 1210
Incorrect arguments to EXECUTE

我做错了吗?我知道它可以用 concat 语句来完成,但为什么它不能这样工作?我不能多次使用相同的参数吗?感谢您的帮助..

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    在您的查询中使用 CONCAT

    SET @statment = "Select name,description 
                     from products 
                     where name like CONCAT('%', ? ,'%') OR 
                           description like CONCAT('%', ? ,'%')";
    

    所以您的完整查询将如下所示,

    DELIMITER $$
    CREATE PROCEDURE searchByTerm(term VARCHAR(300))
      BEGIN
        SET @statment = "Select name,description 
                         from products 
                         where name like CONCAT('%', ? ,'%') OR 
                               description like CONCAT('%', ? ,'%')";
        PREPARE stmt FROM @statment;
        SET @a = term;
        SET @b = term;
        EXECUTE stmt USING @a,@b;
        DEALLOCATE PREPARE stmt; 
      END$$
    

    【讨论】:

    • 太棒了...它起作用了..非常感谢 :) 这真的是一个愚蠢的错误,我没有考虑到“?”作为字符串的一部分
    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 2015-10-04
    • 1970-01-01
    • 2020-04-12
    • 2019-02-07
    • 2011-07-24
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多