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

wdzsjl 2周前 (10-10) 阅读数 6 #WordPress

支持 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); }

 

wx.jpg ywfw.jpg
热门