parse csv 파일을 Maria DB로 가져오는 방법?
csv 파일을 파싱하고 있는 php 코드가 있는데 파싱 데이터를 maria db로 가져오기를 원합니다.내가 어떻게 그럴 수 있을까?
내 코드:
<?php
$row = 1;
if (($handle = fopen("users.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
출력:
Task1 % php user_upload.php
<p> 3 fields in line 1: <br /></p>
name<br />
surname<br />
email <br />
<p> 3 fields in line 2: <br /></p>
John<br />
smith<br />
jsmith@gmail.com<br />
<p> 3 fields in line 3: <br /></p>
HaMish<br />
JONES<br />
ham@seek.com<br />
<p> 3 fields in line 4: <br /></p>
Phil <br />
CARRY <br />
phil@open.edu.au <br />
<p> 3 fields in line 5: <br /></p>
Johnny<br />
O'Hare<br />
john@yahoo.com.au<br />
<p> 3 fields in line 6: <br /></p>
Mike<br />
O'Connor<br />
mo'connor@cat.net.nz<br />
<p> 3 fields in line 7: <br /></p>
WILLIAM<br />
SMYthe<br />
happy@ent.com.au<br />
<p> 3 fields in line 8: <br /></p>
HAMISH<br />
jones <br />
ham@seek.com<br />
<p> 3 fields in line 9: <br /></p>
Sam!! <br />
WalTERS<br />
sam!@walters.org <br />
<p> 3 fields in line 10: <br /></p>
Daley<br />
thompson<br />
daley@yahoo.co.nz<br />
<p> 3 fields in line 11: <br /></p>
kevin<br />
Ruley<br />
kevin.ruley@gmail.com<br />
<p> 3 fields in line 12: <br /></p>
Edward <br />
JIKES<br />
edward@jikes@com.au<br />
<p> 1 fields in line 13: <br /></p>
<br />
<p> 1 fields in line 14: <br /></p>
<br />
<p> 1 fields in line 15: <br /></p>
<br />
<p> 1 fields in line 16: <br /></p>
<br />
<p> 1 fields in line 17: <br /></p>
<br />
<p> 1 fields in line 18: <br /></p>
<br />
<p> 1 fields in line 19: <br /></p>
<br />
<p> 1 fields in line 20: <br /></p>
<br />
<p> 1 fields in line 21: <br /></p>
<br />
<p> 1 fields in line 22: <br /></p>
<br />
또한 어떤 이유에서인지 csv 파일에 12줄밖에 없는데도 추가 줄이 계속 인쇄됩니다.그런데 마리아 DB에 파싱 데이터를 저장하려면 어떻게 해야 합니까?그리고 MYSQL에 데이터를 삽입하기 전에 이름과 성을 대문자로 하고 이메일을 소문자로 했으면 합니다.처음이라 잘 모르겠어요, 어떤 도움이라도 주시면 감사하겠습니다.
빈 줄은 파일의 공간을 미룬 결과일 수 있습니다.대신 사용할 수 있습니다.file
그리고.array_map
,와 함께file
적절한 플래그를 사용하여 빈 줄을 건너뜁니다.
$lines = file('users.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)
$csv = array_map('str_getcsv', $lines);
그런 다음 열 이름을 가져옵니다( 배열의 첫 번째 행에서 캡처).
$col_names = array_shift($csv);
그런 다음 데이터를 정리하고 관련 배열을 구축합니다.
$users = [];
foreach($csv as $row) {
$users[] = [
$col_names[0] => ucwords(strtolower($row[0])), // name:
$col_names[1] => ucwords(strtolower($row[1])), // surname:
$col_names[2] => strtolower($row[2]), // email:
];
}
str tower, ucwords 등 기본적인 기능을 가진 이름과 이메일을 정상화하고 있으니 자세한 내용은 설명서를 참조하시기 바랍니다.그러면 다음과 같은 배열이 나타납니다.
$users = [
['name' => 'John', 'surname' => 'Smith', 'email' => 'jsmith@gmail.com'],
['name' => 'Hamish', 'surname' => 'Jones', 'email' => 'ham@seek.com'],
// ....
];
업데이트: 위의 라이브 예시는 https://3v4l.org/SFYjd 을 참조하십시오.
그러면 이와 일치하는 MySQL 데이터베이스 테이블이 필요할 것입니다.일을 단순하게 하기 위해서는.id INT
필드를 고유한 자동 increment 인덱스로 지정하고 나머지는 정규 인덱스로 지정합니다.VARCHAR
기둥들
테이블을 만들고 나면 남은 건INSERT
데이터를 입력합니다.그것에 대한 아주 기본적인 참고는 여기를 참조하세요.데이터를 신뢰할 수 없는 경우 MySQLi를 사용하든 PDO를 사용하든 준비된 문(PHP 설명서 참조)을 대신 사용할 수 있습니다.PDO(수동)를 고려합니다.
그러나 일반 MySQL 데이터베이스 테이블 설계 및 데이터 삽입은 이 답을 벗어난 것입니다. 이는 숙제이므로, 데이터베이스 삽입에서 특정 문제가 발생할 경우 읽고 실험한 후 새로운 질문을 게시하십시오.
추신. 데이터가 이미 준비되어 있다면 다음을 사용하여 MySQL로 CSV를 직접 가져올 수도 있습니다.LOAD DATA INFILE
. 예를 들어, SO: CSV 파일을 MySQL 테이블로 가져오려면 어떻게 해야 합니까?를 참조하십시오. CSV 파일을 MySQL 테이블로 가져오기(프로세스에서 데이터 변환에 대한 예 포함), MySQL Manual.(PHP 대신 MySQL 함수로 데이터 정리를 처리하고 싶다면 "Input Preprocessing"의 섹션을 참조하고 CSV를 그대로 PHP에서 MySQL로 던지기만 하면 됩니다.
먼저 csv를 연관 배열로 파싱한 다음 대량 삽입 쿼리를 생성하여 데이터베이스로 전송합니다.
데이터베이스에서 오류가 발생하거나 발생 가능한 오류를 처리하지 않도록 각 값의 유효성을 검사해야 하는지 고려해 보십시오.
MariaDB에서 쿼리를 실행하는 방법을 잘 모르는 경우(이와 같은 작업의 경우 MySQL과 동일함) github를 검색하는 것이 좋습니다: "MySQL PHP 클래스"
csv를 구문 분석할 함수가 있는지 이 링크를 확인합니다.기본적으로 다음을 사용합니다.fgetcsv()
에서 제 을 하는while()
리
그런를 할 수 .foreach()
: loop:합니다.예를 들어,
INSERT into users (field_1,field_2,field_3,field_4,field_5) values
(value_1,value_2,value_3,value_4,value_5),
(value_1,value_2,value_3,value_4,value_5);
당신은 또한 이 게시물이 유용하다고 여길지도 모릅니다.
마지막으로 인터넷을 검색해 보세요.이 작업을 달성하기 위한 예시가 가득합니다. :)
insert into table (column1, columne2) values
(
json_value(concat('{"data": [', csvstringarow, ']}'), '$.data[0]'),
json_value(concat('{"data": [', csvstringarow, ']}'), '$.data[1]')
)
언급URL : https://stackoverflow.com/questions/64530592/how-to-import-parse-csv-file-to-maria-db
'programing' 카테고리의 다른 글
.prop('checked', false) 또는 .removeAtr('checked')? (0) | 2023.09.26 |
---|---|
$q 약속 오류 콜백 체인 (0) | 2023.09.26 |
도커 로그인 알 수 없는 속기 플래그: 'e' (0) | 2023.09.21 |
내장형 장치에 적합한 직렬 통신 프로토콜/스택? (0) | 2023.09.21 |
$wpdb->last_의 결과입니다. (0) | 2023.09.21 |