php запись в базу данных с csv файла
Есть вот такой вот файл dataset-min.csv с данными по типу
category,firstname,lastname,email,gender,birthDate
toys,Maribel,Towne,[email protected],female,1972-05-05
electronics,Martina,Heller,[email protected],female,1990-11-27
пробую писать их в созданую базу данных mySQL вот таким php
<?php
// Подключение к базе данных
$host = "localhost";
$user = "root";
$password = "";
$database = "test_users";
$port = 3306;
$conn = mysqli_connect($host, $user, $password);
// Проверка соединения
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Проверка существования базы данных
$sql = "CREATE DATABASE IF NOT EXISTS $database";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully </br>";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
///////////////////
$conn = mysqli_connect($host, $user, $password, $database);
// Проверка существования таблицы
$table = "users";
$sql = "SHOW TABLES LIKE '$table'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) == 0) {
// Таблица не существует
// Создание таблицы
$sql_create_table = "CREATE TABLE $table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
category VARCHAR(30) NOT NULL,
firstname VARCHAR(50) NOT NULL,
lastname VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
gender ENUM('male', 'female') NOT NULL,
birthDate DATE NOT NULL
)";
} else {
// Таблица существует
echo "Table $table already exists";
}
// Открытие CSV файла для чтения данных
$csv_file = fopen("dataset.csv", "r");
// Чтение строк из CSV файла и заполнение таблицы данными
while (($data = fgetcsv($csv_file, 1000, ",")) !== FALSE) {
$category = mysqli_real_escape_string($conn, $data[0]);
$firstname = mysqli_real_escape_string($conn, $data[1]);
$lastname = mysqli_real_escape_string($conn, $data[2]);
$email = mysqli_real_escape_string($conn, $data[3]);
$gender = mysqli_real_escape_string($conn, $data[4]);
// Проверяем, что строка 'birthDate' не пустая
if (!empty($data[5])) {
$birthDate = date('Y-m-d', strtotime($data[5]));
} else {
$birthDate = '0000-00-00'; // Или можно использовать значение NULL
}
$sql_insert = "INSERT INTO users (category, firstname, lastname, email, gender, birthDate)
VALUES ('".$category."', '".$firstname."', '".$lastname."', '".$email."', '".$gender."', '".$birthDate."')";
mysqli_query($conn, $sql_insert);
}
// Закрытие файла CSV
fclose($csv_file);
// Закрытие соединения с базой данных
mysqli_close($conn);
///////////////
?>
оно вроде как и записывает, но в процессе проверки ругаеться, на формат $birthDate, что не так с форматом, может кто-то подсказать как поправить код что б ошибка ушла ? *файл *.csv какой приходит, его менять нельзя.
Error inserting record: Incorrect date value: '' for column 'birthDate' at row 1
Ответы (1 шт):
Разобрался с проблемой. 1) Оказалось что в файле dataset-min.csv были проставлены Enters и при затягивании в базу оно ломало настройку 2) Кавычки в параметре 'birthDate' трактовались как тип - string и надо было их убрать. Вот ответ, как затянуть .csv файл в базу mySql
<?php
// Подключение к базе данных
$host = "localhost";
$user = "root";
$password = "";
$database = "test_users";
$port = 3306;
$conn = mysqli_connect($host, $user, $password);
// Проверка соединения
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Проверка существования базы данных
$sql = "CREATE DATABASE IF NOT EXISTS $database";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully </br>";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
///////////////////
$conn = mysqli_connect($host, $user, $password, $database);
// Проверка существования таблицы
$table = "users";
$result = mysqli_query($conn, "SHOW TABLES LIKE '$table'");
if (mysqli_num_rows($result) == 0) {
// Таблица не существует
// Создание таблицы
$sql_create_table = "CREATE TABLE $table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
category VARCHAR(30) NOT NULL,
firstname VARCHAR(50) NOT NULL,
lastname VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE,
gender VARCHAR(50) NOT NULL,
birthDate DATE NOT NULL
)";
if(mysqli_query($conn, $sql_create_table)){
echo "We created column users in database";
} else{
echo "Error creating table: ". mysqli_error($conn);
}
} else {
// Таблица существует
echo "Table $table already exists";
}
$csv_file = fopen("dataset-min.csv", "r");
// Чтение строк из CSV файла и заполнение таблицы данными
while (($data = fgetcsv($csv_file, 1000, ",")) !== FALSE) {
$category = mysqli_real_escape_string($conn, $data[0]);
$firstname = mysqli_real_escape_string($conn, $data[1]);
$lastname = mysqli_real_escape_string($conn, $data[2]);
$email = mysqli_real_escape_string($conn, $data[3]);
$gender = mysqli_real_escape_string($conn, $data[4]);
$birthDate = date('Y-m-d', strtotime($data[5]));
$sql_insert = "INSERT INTO users (category, firstname, lastname, email, gender, birthDate)
VALUES ('".$category."', '".$firstname."', '".$lastname."', '".$email."', '".$gender."', '".$birthDate."')";
if(mysqli_query($conn, $sql_insert)){
echo "Record inserted successfully";
} else{
echo "Error inserting record: ". mysqli_error($conn) . "</br>";
}
}
// Закрытие файла CSV
fclose($csv_file);
// Закрытие соединения с базой данных
mysqli_close($conn);
?>