1

我的方法$csv->getContent();包含我的列名,“数据”是我要导入数据库的各个行。将我的各种 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();
4

2 回答 2

0

好的,我找到了我的问题的答案。我构建了一个供个人使用的小型应用程序,我可以在其中保存我在网上列出的拍卖内容。一些内容很旧并且包含格式错误的 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-23T17:39:28.500 回答
0

我不喜欢你的代码。如果有数千个数据并且您循环每个数据然后插入数据库怎么办。有一个 mysql 查询将 csv 文件导入数据库表。

来源:how-to-import-csv-file-to-mysql-table

于 2013-04-23T02:27:47.753 回答