Mysql 自定义函数

伟洪winni 2016-05-25 03:24:26
Mysql 自定义函数怎么用


CREATE FUNCTION `strip_tags`($str text) RETURNS text

BEGIN

DECLARE $start, $end INT DEFAULT 1;

LOOP

SET $start = LOCATE("<", $str, $start);

IF (!$start) THEN RETURN $str; END IF;

SET $end = LOCATE(">", $str, $start);

IF (!$end) THEN SET $end = $start; END IF;

SET $str = INSERT($str, $start, $end - $start + 1, "");

END LOOP;

END;
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2016-05-26
  • 打赏
  • 举报
回复
按理说后面要加一个分号的 DROP FUNCTION IF EXISTS `strip_tags`; 但是mysql_query 只能执行一条sql语句,所以它把整个语句当成一条sql语句了,当成一条sql显然是不对的。
伟洪winni 2016-05-25
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
永久,直到你删去他
我加了一句 DROP FUNCTION IF EXISTS `strip_tags`; 就报错了

You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near 
'CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start,' 
at line 2

    $sql =<<< 'SQL'
DROP FUNCTION IF EXISTS `strip_tags`
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
    DECLARE $start, $end INT DEFAULT 1;
    LOOP
        SET $start = LOCATE("<", $str, $start);
        IF (!$start) THEN RETURN $str; END IF;
        SET $end = LOCATE(">", $str, $start);
        IF (!$end) THEN SET $end = $start; END IF;
        SET $str = INSERT($str, $start, $end - $start + 1, "");
    END LOOP;
END;
SQL;
xuzuning 2016-05-25
  • 打赏
  • 举报
回复
永久,直到你删去他
伟洪winni 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
select strip_tag('<p>aaa</p>')
update tbl_name set html=strip_tag(html)
自定义函数可以存活多久?
xuzuning 2016-05-25
  • 打赏
  • 举报
回复
不会错的,我刚刚测试了你的指令 你最好写到程序里
$sql =<<< 'SQL'
CREATE FUNCTION `strip_tags`($str text) RETURNS text 
 
BEGIN 
 
    DECLARE $start, $end INT DEFAULT 1; 
 
    LOOP 
 
        SET $start = LOCATE("<", $str, $start); 
 
        IF (!$start) THEN RETURN $str; END IF; 
 
        SET $end = LOCATE(">", $str, $start); 
 
        IF (!$end) THEN SET $end = $start; END IF; 
 
        SET $str = INSERT($str, $start, $end - $start + 1, ""); 
 
    END LOOP; 
 
END;
SQL;
mysql_query($sql) or die(mysql_error());

因为你使用了 php 的变量名表示,phpmyadmin 可能另做了处理
mysql_connect();
mysql_select_db('test');
$sql =<<< 'SQL'
CREATE FUNCTION `strip_tags`($str text) RETURNS text 
 
BEGIN 
 
    DECLARE $start, $end INT DEFAULT 1; 
 
    LOOP 
 
        SET $start = LOCATE("<", $str, $start); 
 
        IF (!$start) THEN RETURN $str; END IF; 
 
        SET $end = LOCATE(">", $str, $start); 
 
        IF (!$end) THEN SET $end = $start; END IF; 
 
        SET $str = INSERT($str, $start, $end - $start + 1, ""); 
 
    END LOOP; 
 
END;
SQL;
//mysql_query($sql) or die(mysql_error());

$rs = mysql_query("select strip_tags('<a>a<a>b')");
print_r(mysql_fetch_row($rs));
Array
(
    [0] => ab
)

伟洪winni 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
select strip_tag('<p>aaa</p>')


update tbl_name set html=strip_tag(html)


mysql里执行下面代码报错


CREATE FUNCTION `strip_tags`($str text) RETURNS text

BEGIN

DECLARE $start, $end INT DEFAULT 1;

LOOP

SET $start = LOCATE("<", $str, $start);

IF (!$start) THEN RETURN $str; END IF;

SET $end = LOCATE(">", $str, $start);

IF (!$end) THEN SET $end = $start; END IF;

SET $str = INSERT($str, $start, $end - $start + 1, "");

END LOOP;

END;



xuzuning 2016-05-25
  • 打赏
  • 举报
回复
select strip_tag('<p>aaa</p>')
update tbl_name set html=strip_tag(html)

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧