我的方法$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();发布于 2013-04-24 01:39:29
好了,我已经找到了我的问题的答案。我建立了一个供个人使用的小应用程序,在那里我可以保存我在网上列出的拍卖内容。有些内容是旧的,并且包含格式错误的html,所以当解析csv并导入数据库时,格式错误的html可能真的会把事情搞砸。然而,经过更多的研究和阅读,PDO的"bindParam“和"execute”方法允许无缝地导入内容,无论html格式多么糟糕。这就是我如何组织我的测试查询,然后继续尝试将混乱的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(); 发布于 2013-04-23 10:27:48
我不喜欢你的代码。如果有数以千计的数据,你循环每个数据,然后插入到数据库中,该怎么办?存在将csv文件导入数据库表的mysql查询。
https://stackoverflow.com/questions/16159857
复制相似问题