支持 enum 类型的字段允许为空插入数据库

支持 enum 类型的字段允许为空插入数据库,我们需要对现有代码进行一些修改。具体来说,我们需要在处理每一行数据时判断每个字段的类型,并在插入时正确处理 NULL 值。

以下是修改后的代码示例:

// 备份数据记录
$result = Db::query("SELECT * FROM `{$table}` LIMIT {$start}, 1000");

foreach ($result as $row) {
    // 使用 addslashes 处理特殊字符
    $row = array_map('addslashes', $row);

    // 获取表结构信息
    $table_structure = Db::query("SHOW COLUMNS FROM `{$table}`");

    // 构造 INSERT 语句
    $values = [];
    foreach ($table_structure as $column_info) {
        $column_name = $column_info['Field'];
        $column_type = $column_info['Type'];

        // 判断是否为 enum 类型
        if (stripos($column_type, 'enum') !== false) {
            // 如果是 enum 类型且值为 null 或空字符串,则插入 NULL
            if ($row[$column_name] === null || $row[$column_name] === '') {
                $values[] = 'NULL';
            } else {
                // 否则正常插入
                $values[] = "'" . str_replace(array("\r", "\n"), array('\r', '\n'), $row[$column_name]) . "'";
            }
        } else {
            // 非 enum 类型直接插入
            $values[] = "'" . str_replace(array("\r", "\n"), array('\r', '\n'), $row[$column_name]) . "'";
        }
    }

    $sql = "INSERT INTO `{$des_table}` VALUES (" . implode(", ", $values) . ");\n";

    if (false === $this->write($sql)) {
        return false;
    }
}

// 还有更多数据
if ($count > $start + 1000) {
    return array($start + 1000, $count);
}

 

posted @   黄文Rex  阅读(12)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示