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

时间:2021-08-01 17:39:16

标签: php mysql

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

$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`, 1, 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

1 个答案:

答案 0 :(得分:1)

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

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