mysql查询帮助(如语句)

时间:2009-05-20 14:45:54

标签: mysql stored-procedures sql-like

我正在使用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 ;

由于

2 个答案:

答案 0 :(得分:8)

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 ;

答案 1 :(得分: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
$$