2

入力変数を持つストアドプロシージャを持つ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 ;

ありがとう

4

2 に答える 2

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 ;
于 2009-05-20T14:48:35.110 に答える
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
$$
于 2009-08-18T06:54:55.197 に答える