我正在使用Symfony 3进行数据映射项目。 这是规格:
“通常有必要从平面文件(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对应于我们要在其上插入数据的表列:如果我执行var_dump($ selectChoiceFields),它将回传给我:“ name”,因为我想在“ name”列上工作。
$ choiceData对应于我们要在所选列中插入的csv文件数据:如果我执行var_dump($ choiceData),它将返回我:“ test”,“ test2”