PHP函数到MySQL函数

PHP函数到MySQL函数,php,mysql,Php,Mysql,有人能告诉我如何将这个函数重写为MySQL函数,以便直接在MySQL上解码吗 const CHAR_MAP = 'abcdefghijklmnopqrstuvwxz0123456789'; function decode($encoded) { $elen = strlen($encoded); $cmlen = strlen(Mobile::CHAR_MAP); $offset = strpos(Mobile::CHAR_MAP, substr($encoded, 0

有人能告诉我如何将这个函数重写为MySQL函数,以便直接在MySQL上解码吗

const CHAR_MAP = 'abcdefghijklmnopqrstuvwxz0123456789';

function decode($encoded) {
    $elen = strlen($encoded);
    $cmlen = strlen(Mobile::CHAR_MAP);
    $offset = strpos(Mobile::CHAR_MAP, substr($encoded, 0, 1), 1);

    $decoded = '';
    $check = 0;
    for ($i=1;$i<$elen-1;$i++) {
        $a = strpos(Mobile::CHAR_MAP, substr($encoded, $i, 1), 1);
        $x = $a - $offset * $i;

        $x %= $cmlen;

        if ($x < 0) {
            $x = $cmlen + $x;
        }

        $decoded .= $x;

        $check += $x;

    }


    return $decoded;

}
const CHAR_MAP='abcdefghijklmnopqrstuvwxz012456789';
函数解码($encoded){
$elen=strlen($encoded);
$cmlen=strlen(Mobile::CHAR\u-MAP);
$offset=strpos(移动::字符映射,substr($encoded,0,1),1);
$decoded='';
$check=0;

对于($i=1;$i好吧,根据我更好的判断,我已经为您拼凑了一个快速SQL函数

我应该注意到,SO并不是一个让人们为你写完整答案的网站,而是一个让你学会如何为自己写答案的网站。然而,在这种情况下,如果不给出答案,我看不到如何教学,所以它就在这里

但是请注意:我根本没有测试过。我直接把它直接输入到SO回答框中,它并没有在一个实际的MySQL服务器附近。如果它不起作用(这是非常可能的),请在请求任何进一步帮助之前尝试自己修复它(并且把它看作是帮助你了解它如何工作的答案的一部分)。 另外请注意,我假设我在评论中对您的原始PHP函数存在错误的猜测是准确的。此SQL函数对字符串执行字符移位操作;它不会输出无用的数字字符串

delimiter ||
DROP FUNCTION IF EXISTS mydecode||
CREATE FUNCTION mydecode( x longtext) RETURNS longtext
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA 
BEGIN
DECLARE len INT UNSIGNED;
DECLARE cpos INT UNSIGNED;
DECLARE output LONGTEXT;
DECLARE charmap LONGTEXT;
DECLARE cshift VARCHAR(1);
DECLARE thischar VARCHAR(1);
DECLARE thischarpos INT UNSIGNED;

SET charmap = 'abcdefghijklmnopqrstuvwxz0123456789abcdefghijklmnopqrstuvwxz0123456789';
SET len = LENGTH(x);
SET cpos = 1;
SET cshift = POSITION(SUBSTRING(x,len,1) IN charmap);

REPEAT
  SET thischar = SUBSTRING(x,cpos,1);
  SET thischarpos = POSITION(thischar IN charmap) + 35;
  SET output = CONCAT_WS(output,SUBSTRING(charmap,thischarpos-cshift,1));
  SET cpos = cpos + 1;
  UNTIL cpos >= len END REPEAT;
return output;
END;
||
我会重复我在评论中提到的另一点,这是一个微不足道的操作。像这样简单的字符移位操作实际上是非常无用的。我想不出有什么场景是一个好主意。尤其是安全性


如果这个“编码器”如果你需要改变数据库,那么你必须重写这个代码,而用PHP编写,你可以更容易地将它应用到不同的数据库后端。正在尝试计算函数试图实现的内容。
$x
是一个介于0和35之间的数字,因此
$decoded.=$x
没有意义。我怀疑它应该是
$decoded.=substr(字符映射,$x,1)
或类似的东西?无论如何,这是一个微不足道的ROT-x解码器;PHP有一个内置的,尽管它是如此微不足道的编码机制,我无法想象为什么有人会费心使用它。如果您希望提高速度,则该页面上的注释会包含具有更好性能的函数变体performance@SDC 函数as is用于现有数据,这意味着我无法更改它,函数as is在PHP中工作,但我希望它在MySQL上可用。对Chris来说,你是对的,但该数据现在存在于数据库中,我正在寻找一种不用PHP访问它的方法。谢谢,它不会返回任何结果,但我现在将一步一步地使用它然后试着把它修好。