msql quote()函数

来源:互联网 发布:java毕业设计题目大全 编辑:程序博客网 时间:2024/05/16 14:59
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 INVOKERBEGINDECLARE V_Str VARCHAR(512);SET V_Str = FN_GET_VAL(@tmp_query, P_Key);IF V_Str IS NULL OR V_Str = '' THENRETURN NULL;END IF;SET V_Str = REPLACE(REPLACE(REPLACE(QUOTE(V_Str), '%', '\%'), '_', '\_'), ' ', '%');IF P_Field = '' THENSET 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
原创粉丝点击