Я работаю над проектом сопоставления данных с Symfony 3. Вот спецификации:
"Часто необходимо заполнять базу данных из плоских файлов (CSV): различные интегрированные инструменты в службы баз данных предоставляютпространство загрузки, но этот доступ редко используется службами веб-пользователей. Таким образом, вас попросят предоставить пространство импорта плоских файлов, чтобы определить столбцы (если применимо), выбрать поля таблицы для заполнения, предложить предварительное удаление таблицыили завершение, чтобы проверить типизацию данных и синхронизировать сопоставление данных. "
Пока что импорт плоских файлов выполнен правильно, я хорошо восстанавливаю содержимое и отображаю его в динамической таблице.
Проблема возникает в момент вставки в базу данных!Во время моих различных тестов отображения данных мне возвращались различные ошибки:
Список вставленных значений не соответствует списку столбцов: 1136 Количество столбцов не соответствует количеству значений в строке 1
Общая ошибка: 1364 Поле 'xxxxxx' не имеет значения по умолчанию
$choiceMapping = $session->get('choiceMapping');
$tableChoice = $session->get('tableChoice');
$selectChoiceFields = implode(",", $session->get('selectChoiceFields'));
$choiceData = $session->get('choiceData');
$config = new Configuration();
$connectionParams = array(
'dbname' => 'xxxxx',
'user' => 'root',
'password' => '',
'host' => '127.0.0.1',
'driver' => 'pdo_mysql',
);
$conn = DriverManager::getConnection($connectionParams, $config);
$sm = $conn->getSchemaManager();
$tableDetails = $sm->listTableColumns($session->get('tableChoice'));
if(sizeof($selectChoiceFields[0]) === 0)
{
$addFlash = $this->addFlash('danger', 'Choose at least one field !');
return $this->redirectToRoute('mapping');
}
$host = '127.0.0.1';
$db = 'xxxx';
$user = 'root';
$pass = '';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try
{
$cnx = new PDO($dsn, $user, $pass, $opt);
}
catch(PDOException $e)
{
die('Connection failed :'. $e->getMessage());
}
if($choiceMapping === "completion")
{
$content = $cnx->prepare('INSERT INTO '.$session->get('tableChoice').' ('.$selectChoiceFields.') VALUES ('.$choiceData.')');
$content->execute();
$addFlash = $this->addFlash('success', "Data saved successfully !");
}
else
{
$content = $cnx->prepare('Truncate '.$session->get('tableChoice'));
$content->execute();
$sql = $cnx->prepare('INSERT INTO '.$session->get('tableChoice').' ('.$selectChoiceFields.') VALUES (:choiceData)');
$sql->bindValue(':choiceData', $choiceData[0]);
$sql->execute();
$addFlash = $this->addFlash('success', "Data saved successfully !");
}
return $this->render('result.html.twig');
$ choiceMapping, которое соответствует методу вставки (завершение или усечение)
$ tableChoice, который соответствует выбранной таблице, с которой вы хотите работать
$ selectChoiceFields, которая соответствует столбцам таблицы, в которую мы хотим вставить данные: если я сделаю var_dump ($selectChoiceFields), он отправит мне обратно: «имя», потому что я хочу работать со столбцом «имя».
$ choiceData, который соответствует данным файла CSV, которые мы хотим вставить в выбранный столбец: еслиЯ делаю var_dump ($ choiceData), он отправит мне обратно: "test", "test2"