2013-04-23 5 views
1

내 방법 $csv->getContent();에 내 열 이름이 포함되어 있으며 '데이터'는 데이터베이스로 가져올 개별 행입니다. 아래의 루프는 내 다양한 ​​CSV를 데이터베이스로 가져올 때 완벽하게 작동합니다. 그러나 html 콘텐츠가있는 CSV 열이있을 때 많은 행을 가져올 수 있지만 일부는 그렇지 않습니다. 따라서 SQLSTATE[HY093]: "Invalid parameter number: number of bound variables does not match number of tokens" 오류가 발생합니다.php CSV에 HTML 형식의 CSV가 포함되어 있습니다.

내 연구에서, 내가 아래에 표시된 방식대로 일하는 것이 addslashes의 필요성을 피하기 위해 문자를 올바르게 이스케이프 처리해야한다고 생각하지만 차이를 만드는 것처럼 보이지 않습니다. 이 작업을 수행하는 유일한 시간은 내가 addslashes(addslashes($values)); 일 뿐이지 만 어리석은 일이며 해당 내용 앞에 \\\이라는 데이터베이스에 내 콘텐츠가 남습니다.

여기에 단계가 없거나 막 붙어 있습니까? 내가 보는 방식대로, 매번 내 DB에 그것을 얻기 위해 내 콘텐츠를 "방탄"시킬 수 있어야합니다.

$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

이 스레드를 살펴 봅니다. http://stackoverflow.com/questions/10170913/invalid-parameter-number-number-of-bound-variables-does-not-match-number-of-tok –

+0

그리고 반복하십시오. 그것은 정말로 $ content [ 'columns']'이거나'$ value [ 'columns']'이어야만 하는가? –

+0

$ value [columns]이 존재하지 않습니다. $ content는 다차원 배열입니다. 죄송합니다. 그러나이 답변은 제 질문을 다루지 않습니다. 필자는 준비된 명령문을 사용하여이 행을 실행하는 데 매우 관심이 있습니다. 감사합니다 –

답변

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();  
0

나는 코드를 선호하지 않습니다. 수천 개의 데이터가 있고 각 데이터를 루프 한 다음 데이터베이스에 삽입하면 어떻겠습니까? csv 파일을 데이터베이스 테이블로 가져 오기위한 mysql 쿼리가 있습니다.

소스 : how-to-import-csv-file-to-mysql-table

+0

수천 개의 행이 있지만 여전히 빠릅니다. 때때로 Bulk Insert Statement를 사용하지만이 특정 문제에 대해서는이 방법으로 처리해야합니다. –

관련 문제