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)
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
