msql quote()函数

QUOTE()经常用在防止sql注入-- 导出  函数 eshop_v2.FN_MAKE_LIKE2 结构


-- 导出  函数 eshop_v2.FN_MAKE_LIKE2 结构
DROP FUNCTION IF EXISTS `FN_MAKE_LIKE2`;
DELIMITER //
CREATE FUNCTION `FN_MAKE_LIKE2`(`P_Key` VARCHAR(50), `P_Field` VARCHAR(50)) RETURNS varchar(1024) CHARSET utf8
    NO SQL
    DETERMINISTIC
    SQL SECURITY INVOKER
BEGIN
	DECLARE V_Str VARCHAR(512);
	
	SET V_Str = FN_GET_VAL(@tmp_query, P_Key);
	IF V_Str IS NULL OR V_Str = '' THEN
		RETURN NULL;
	END IF;
	
	SET V_Str = REPLACE(REPLACE(REPLACE(QUOTE(V_Str), '%', '\%'), '_', '\_'), ' ', '%');
	IF P_Field = '' THEN
		SET P_Field = P_Key;
	END IF;
	
	RETURN CONCAT(P_Field, ' LIKE ', INSERT(INSERT(V_Str, CHAR_LENGTH(V_Str), 0, '%'), 2, 0, '%'));
END//
DELIMITER

SET V_Str = REPLACE(REPLACE(REPLACE(QUOTE(V_Str), '%', '\%'), '_', '\_'), ' ', '%');

如果输入一个即将要搜索字符串为淘宝,执行Quote(V_Str)后结果为‘淘宝’,如果这个字符串中包含'%'和'_',将通配符前插入转义字符,如果为空个,也同样添加通配符%。

RETURN CONCAT(P_Field, ' LIKE ', INSERT(INSERT(V_Str, CHAR_LENGTH(V_Str), 0, '%'), 2, 0, '%'));

将处理好后的字符串(此字符串前后已添加单引号,经过这句的转换,即为要搜索的字符串前后加通配符%。例如‘%ABC%’)

mysql> select length('123');
+---------------+
| length('123') |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

mysql> select length(quote('123'));
+----------------------+
| length(quote('123')) |
+----------------------+
|                    5 |
+----------------------+
1 row in set (0.00 sec)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值