【问题标题】:mysql query help (like statement)mysql查询帮助(like语句)
【发布时间】:2009-05-20 14:45:53
【问题描述】:

我正在使用 mysql,我有一个存储过程,它有一个输入变量。

我想在 select 语句中使用这个变量(带有 like 子句)。

例如:

DELIMITER $$

DROP PROCEDURE IF EXISTS `DeleteDataByTransactionID` $$
CREATE DEFINER=`root`@`%` PROCEDURE `DeleteDataByTransactionID`(in **$TransactionID** varchar(50))

BEGIN

delete from sqlstatements where tempsql like '%'+ **$TransactionID** + '%';

END $$


DELIMITER ;

谢谢

【问题讨论】:

    标签: mysql stored-procedures sql-like


    【解决方案1】:
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `DeleteDataByTransactionID`
    $$
    CREATE DEFINER=`root`@`%` PROCEDURE `DeleteDataByTransactionID`(TransactionID VARCHAR(50))
    BEGIN
            DELETE
            FROM    sqlstatements
            WHERE   tempsql LIKE CONCAT('%', TransactionID, '%');
    END
    $$
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      实际上,如果调用者未正确参数化对存储过程的调用,则接受的答案版本对 SQL 注入开放。我建议在存储过程中使用准备好的语句,以确保安全,而不是依赖调用者:

      DELIMITER $$
      CREATE PROCEDURE `DeleteDataByTransactionID`
      (
          TransactionID VARCHAR(50)
      )
      BEGIN
      
      SET @sql = 
       "DELETE 
        FROM sqlstatements
        WHERE   
           tempsql LIKE CONCAT('%', ?, '%')";
      
      SET @transid  = TransactionID;
      
      PREPARE stmt FROM @sql;
      EXECUTE stmt USING @transid;
      DEALLOCATE PREPARE stmt;
      
      END
      $$
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 2011-07-19
        • 2011-04-28
        相关资源
        最近更新 更多