Php 不同表上的数据映射

Php 不同表上的数据映射,php,symfony,Php,Symfony,我正在和symfony3一起做一个数据映射项目。 以下是规格: “通常需要从平面文件(csv)填充数据库:数据库服务中的各种集成工具提供了一个上载空间,但这种访问很少由web用户服务操作。 因此,要求您提供平面文件导入空间、检测列(如果适用)、选择要填充的表字段、建议表的初步删除或完成、验证数据类型以及同步数据映射。” 到目前为止,平面文件导入已正确完成,我很好地恢复了内容,并将其显示在动态表中。 在数据库中插入时出现问题!在我的各种数据映射测试中,我收到了各种错误: 插入值列表与列列表不匹

我正在和symfony3一起做一个数据映射项目。 以下是规格:

“通常需要从平面文件(csv)填充数据库:数据库服务中的各种集成工具提供了一个上载空间,但这种访问很少由web用户服务操作。 因此,要求您提供平面文件导入空间、检测列(如果适用)、选择要填充的表字段、建议表的初步删除或完成、验证数据类型以及同步数据映射。”

到目前为止,平面文件导入已正确完成,我很好地恢复了内容,并将其显示在动态表中。

在数据库中插入时出现问题!在我的各种数据映射测试中,我收到了各种错误:

  • 插入值列表与列列表不匹配: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,它对应于我们要在其上插入数据的表列:如果我执行变量转储($selectChoiceFields),它会将我发回:“name”,因为我想处理“name”列

$choiceData,它对应于我们要插入到所选列中的csv文件数据:如果我执行var_转储($choiceData),它会将我发回:“test”、“test2”