Отображение данных на разных таблицах - PullRequest
1 голос
/ 10 марта 2019

Я работаю над проектом сопоставления данных с Symfony 3. Вот спецификации:

"Часто необходимо заполнять базу данных из плоских файлов (CSV): различные интегрированные инструменты в службы баз данных предоставляютпространство загрузки, но этот доступ редко используется службами веб-пользователей. Таким образом, вас попросят предоставить пространство импорта плоских файлов, чтобы определить столбцы (если применимо), выбрать поля таблицы для заполнения, предложить предварительное удаление таблицыили завершение, чтобы проверить типизацию данных и синхронизировать сопоставление данных. "

Пока что импорт плоских файлов выполнен правильно, я хорошо восстанавливаю содержимое и отображаю его в динамической таблице.enter image description here

Проблема возникает в момент вставки в базу данных!Во время моих различных тестов отображения данных мне возвращались различные ошибки:

  • Список вставленных значений не соответствует списку столбцов: 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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...