支持 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);
}
标签:name,column,数据库,enum,为空,table,array,row From: https://www.cnblogs.com/hwrex/p/18446126