MySQL 错误 1305 - FUNCTION dbname.STUFF 不存在

我需要替换文件存储中所有子文件的路径,例如: 将“子文件夹”移动到“新文件夹/子文件夹”时,我希望即使在“子文件夹/文件夹/子文件夹”中的所有文件也仅将路径的第一部分(“子文件夹/”)替换为“新文件夹/子文件夹/”。不是整个替换,因为它不仅影响字符串的第一次匹配。所以我使用了这个查询:

$sql_stuff_length = strlen($just_path_old) + 1;
$db->setQuery(
    'UPDATE school_files_storage SET `path`=' . $db->quote($just_path_new) . ' WHERE `path`=' . $db->quote($just_path_old) . ';
     UPDATE school_files_storage SET `path`=STUFF(`path`,1,' . $sql_stuff_length . ',' . $db->quote($just_path_new . '/') . ') WHERE `path` LIKE ' . $db->quote($just_path_old . '/%'
);

所以最后的查询是:

UPDATE school_files_storage SET `path`='NewFolder/Subfolder' WHERE `path`='Subfolder';
UPDATE school_files_storage SET `path`=STUFF(`path`,10,'NewFolder/Subfolder') WHERE `path` LIKE 'Subfolder/%'

但它给了我错误:

#1305 - 函数 dbname.STUFF 不存在 MySQL 版本为 5.6

如何解决路径中首次出现的解释替换?

UPD:我试过 TRIM,

                $db->setQuery(
                    'UPDATE school_files_storage SET `path`=' . $db->quote($just_path_new) . ' WHERE `path`=' . $db->quote($just_path_old) . ';
                     UPDATE school_files_storage SET `path`=concat(' . $db->quote($just_path_new . '/') . ',TRIM(LEADING ' . $db->quote($just_path_old . '/') . ' FROM `path`)) WHERE `path` LIKE ' . $db->quote($just_path_old . '/%')
                );

但是有新的错误:

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 'UPDATE school_files_storage SET `path`=concat('/',TRIM(LEADING '/' FROM `path`)' at line 2
yanchengcai 回答:MySQL 错误 1305 - FUNCTION dbname.STUFF 不存在

您可以在字符串前设置一个或多个字符以仅替换第一个字符。

UPDATE school_files_storage SET `path`= REPLACE(CONCAT('///',path),'///Subfolder','NewFolder/Subfolder') WHERE `path` LIKE 'Subfolder/%';
本文链接:https://www.f2er.com/1106.html

大家都在问