다른 데이터베이스의 내용을 기반으로 데이터베이스의 행을 업데이트, 삽입 및 삭제하는 코드를 작성하려고합니다. 이는 결국 다른 기준에 따라 자동으로 발생합니다. 목표는 테이블을 동일하게 만드는 것입니다. 데이터베이스 복제는 옵션이 아닙니다.해시 배열이 아닌 경우 Perl
이 질문은 실제로 MYSQL 또는 DBI 모듈에 관한 것이 아니라 두 개의 배열을 비교하는 것입니다.
나는 두 개의 해시 배열을 만들기 위해 fetchall_arrayref({})
을 사용했다. 이것은 내가 다른처럼 할 데이터베이스 테이블의 배열의 예는, 그것을이다
[
{ DESCRIPTION => "Default", ID => 0, NAME => "Default", VERSION => "1.0" },
{ DESCRIPTION => "", ID => 1, NAME => "Custom 1", VERSION => "1.2" },
{ DESCRIPTION => "", ID => 2, NAME => "Custom 2", VERSION => "2.0" },
{ DESCRIPTION => "", ID => 3, NAME => "Custom 3", VERSION => "6.0" },
{ DESCRIPTION => "", ID => 5, NAME => "Custom 5", VERSION => "1.0" },
]
:
이
는 내 코드에$profile
입니다 원본 데이터베이스 테이블의 배열의 예입니다 내 코드에
$profile2
입니다 :
[
{ DESCRIPTION => "Default", ID => 0, NAME => "Default", VERSION => "1.0" },
{ DESCRIPTION => "", ID => 1, NAME => "Custom 1", VERSION => "1.1" },
{ DESCRIPTION => "", ID => 2, NAME => "Custom 2", VERSION => "1.0" },
{ DESCRIPTION => "", ID => 3, NAME => "Custom 3", VERSION => "6.0" },
{ DESCRIPTION => "", ID => 4, NAME => "Custom 4", VERSION => "1.0" },
]
다음은 ID가 두 테이블에있는 항목을 업데이트하기 위해 근무하고 다음
,686을$profile
의 ID가 $profile2
이 아니고 $profile2
(my $insert = 'INSERT INTO PROFILE(ID,VERSION,NAME,DESCRIPTION) VALUES('."\'$id\'".','."\'$ver\'".','."\'$name\'".','."\'$desc\'".');';
)의 데이터베이스 테이블에 해당 행이 삽입되어 있는지 확인하려면 코드가 필요합니다. ID가 $profile2
이고 $profile
이 아닌지 확인한 후 $profile2
데이터베이스 (my $update = 'DELETE FROM PROFILE WHERE ID='."\'$id2\'".';';
)에서 행을 삭제하는 코드가 필요합니다.
도움을 주시면 감사하겠습니다. 감사!
응! ' " '". $ var. "'"'을 사용하지 마십시오! 자리 표시 자나'$ dbh-> quote ($ var)'를 사용하십시오. – ikegami