我的方法$csv->getContent();
包含我的列名,'data'是我要导入数据库的各个行。将各种CSV导入数据库时,下面的循环可以完美运行。但是,当我在CSV中有一个包含html内容的列时,许多行导入正常,但有些行没有导入,我收到SQLSTATE[HY093]: "Invalid parameter number: number of bound variables does not match number of tokens"
错误。
从我的研究中,我发现按照我在下面显示的方式做的事情应该正确地转义字符以避免需要添加,但它似乎没有什么区别。这是唯一有效的时间是我addslashes(addslashes($values));
,但这有点荒谬,它会在适用的字符之前将我的内容留在数据库中\\\
。
我在这里错过了一步,还是我被困住了。我看到它的方式,我应该能够“防弹”我的内容,每次都进入我的数据库。
$this->db->exec("SET CHARACTER SET utf8");
$this->db->beginTransaction();
$content = $csv->getContent();
foreach($content['data'] as $key => $value) {
$sql = "INSERT INTO `".$destination_table."` (`";
$sql .= implode("`, `", $content['columns']);
$sql .= "`) VALUES (";
$sql .= implode(", ", array_fill(0, count($content['columns']), "?"));
$sql .= ")";
$statement = $this->db->prepare($sql);
$statement->execute($value);
}
$this->db->commit();
答案 0 :(得分:0)
我不喜欢你的代码。如果有数千个数据并循环每个数据然后插入数据库,该怎么办?有一个mysql查询将csv文件导入数据库表。
答案 1 :(得分:0)
好的,我找到了问题的答案。我建立了一个供个人使用的小应用程序,我可以保留我在线列出的拍卖内容。有些内容是旧的,包含格式错误的html,所以在解析csv并导入到数据库时,格式错误的html确实搞砸了。然而,经过更多的研究和阅读,PDO的“bindParam”然后“执行”方法无论数据的形成有多么糟糕,都可以无形地导入内容。这是我如何构建我的测试查询,然后只是继续尝试搞砸了数据库的HTML。
$sql = $objDb->prepare('UPDATE `autolist_html` SET `value` = :html WHERE entity = "'.$entity[1].'"');
$sql->bindValue(':html',$_POST[$entity[1].'_html'],PDO::PARAM_STR);
$sql->execute();