You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP拆分目录列表字符串并写入MySQL多字段?

问题解决:MySQL字符串拆分与PHP自动化实现

错误原因

当前SQL语法错误是因为MySQL不支持MS Access的Mid()、InStrRev()、Left()函数,需替换为MySQL原生字符串函数;同时你代码里的Mid(['pathRAW']写法错误,字段名不需要额外加方括号和单引号。

完整PHP实现代码

以下是适配MySQL的完整代码,包含所有字段提取、数据清理、大小计算逻辑:

<?php
// 引入数据库配置文件
include_once 'assets/includes/dbConfig.php'; 

try {
    // 清空目标表
    $query = "DELETE FROM DirList_FORMATED";
    $conn->query($query);
    echo 'DirList_FORMATED 已清空 <br/>';

    // 导入原始数据
    $query = "INSERT INTO DirList_FORMATED (pathRAW) SELECT pathRAW FROM DirList_RAW WHERE pathRAW IS NOT NULL";
    $conn->query($query);
    echo 'DirList_RAW 数据已导入 <br/>';

    // 1. 提取文件大小(fileSizeRAW)
    $query = "UPDATE DirList_FORMATED 
              SET fileSizeRAW = SUBSTRING(pathRAW, LOCATE(' ', REVERSE(pathRAW)) * -1)";
    $conn->query($query);
    echo 'fileSizeRAW 字段已生成 <br/>';

    // 2. 移除路径中的大小信息并去除首尾空格
    $query = "UPDATE DirList_FORMATED 
              SET path = TRIM(REPLACE(pathRAW, fileSizeRAW, ''))";
    $conn->query($query);
    echo '路径已去除大小信息 <br/>';

    // 3. 提取文件扩展名(fileExt)
    $query = "UPDATE DirList_FORMATED 
              SET fileExt = SUBSTRING(path, LOCATE('.', REVERSE(path)) * -1)";
    $conn->query($query);
    echo 'fileExt 字段已生成 <br/>';

    // 4. 提取盘符(drive)
    $query = "UPDATE DirList_FORMATED 
              SET drive = SUBSTRING(path, 1, 1)";
    $conn->query($query);
    echo 'drive 字段已生成 <br/>';

    // 5. 批量移除指定盘符的前缀
    $query = "UPDATE DirList_FORMATED 
              SET path = SUBSTRING(path, 4) 
              WHERE drive IN ('M', 'N', 'O', 'P')";
    $conn->query($query);
    echo '路径已去除盘符前缀 <br/>';

    // 6. 移除文件名中的扩展名部分
    $query = "UPDATE DirList_FORMATED 
              SET path = SUBSTRING(path, 1, LENGTH(path) - LOCATE('.', REVERSE(path)) - 1)";
    $conn->query($query);
    echo '路径已去除扩展名 <br/>';

    // 7. 提取文件夹名(folderName)
    $query = "UPDATE DirList_FORMATED 
              SET folderName = SUBSTRING(path, 1, LOCATE('\\\\', path) - 1)";
    $conn->query($query);
    echo 'folderName 字段已生成 <br/>';

    // 8. 提取文件名(fileName)
    $query = "UPDATE DirList_FORMATED 
              SET fileName = SUBSTRING(path, LOCATE('\\\\', REVERSE(path)) * -1)";
    $conn->query($query);
    echo 'fileName 字段已生成 <br/>';

    // 9. 标记并删除指定扩展名的文件
    $query = "UPDATE DirList_FORMATED 
              SET flag = 'y' 
              WHERE fileExt IN ('srt', 'db')";
    $conn->query($query);
    $query = "DELETE FROM DirList_FORMATED WHERE flag = 'y'";
    $conn->query($query);
    echo '已删除srt/db类型文件 <br/>';

    // 10. 计算并格式化GB单位的文件大小
    $query = "UPDATE DirList_FORMATED 
              SET fileSizeGB = ROUND(fileSizeRAW / 1024 / 1024 / 1024, 3)";
    $conn->query($query);
    echo 'fileSizeGB 字段已生成 <br/>';

    echo '<br/>所有字段处理完成!';
} catch (mysqli_sql_exception $e) {
    die('SQL执行错误: ' . $e->getMessage());
}

// 关闭数据库连接
$conn->close();
?>

关键函数替换说明

Access函数MySQL替代函数功能说明
Mid(str, pos)SUBSTRING(str, pos)从指定位置开始截取字符串
InStrRev(str, char)LOCATE(char, REVERSE(str))从字符串末尾查找目标字符的位置
Left(str, len)SUBSTRING(str, 1, len)截取字符串的前N个字符
Trim(str)TRIM(str)去除字符串首尾的空格

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:34:55