$sql = "INSERT INTO test (" . implode(", ", $header) . ") VALUES " . implode(", ", $values);用此语句在插入数据时省略id列,让MySQL自动为每一行生成一个唯一的id值的方法
时间: 2023-07-19 15:14:30 浏览: 136
在使用上述语句插入数据时,可以将id列从$header数组中删除,然后让MySQL自动生成id。具体的代码如下:
```php
// 假设$header数组中包含所有的字段名,包括id列
if (($key = array_search('id', $header)) !== false) {
unset($header[$key]);
}
// ...
// 读取转换后的csv文件
$csv_data = array_map('str_getcsv', file('your_csv_file.csv'));
// 插入数据
foreach ($csv_data as $data) {
// 创建$values数组,省略id列
$values = array();
foreach ($header as $column_name) {
if ($column_name == 'id') {
continue; // 省略id列
}
$value = $data[$index[$column_name]];
$value = mysqli_real_escape_string($conn, $value);
$values[] = "'$value'";
}
// 执行插入操作
$sql = "INSERT INTO test (" . implode(", ", $header) . ") VALUES (" . implode(", ", $values) . ")";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
// 关闭连接
$conn->close();
```
上述代码中,我们在读取csv文件的部分,使用了unset函数将$header数组中的id列删除。然后,在插入数据时,对于每一行数据,我们创建了一个新的$values数组,省略了id列。这样,在执行插入操作时,就不会插入id列,由MySQL自动生成唯一的id值。
需要注意的是,这种方法只适用于id列是自增列的情况。如果id列不是自增列,那么就需要手动为每一行数据生成唯一的id值,并将其插入到数据库中。
阅读全文