가장 중요하고 중요한 것은 SQL 문자열에 변수를 직접 삽입해서는 안됩니다. 따라서 SQL 주입 공격 가능성이 열리게됩니다. 이러한 변수가 사용자 입력에서 비롯되지 않더라도 위험한 버그로 인해 데이터가 망가질 수 있습니다.
MySQL DBD 드라이버는 기본적으로 안전 기능으로 해제되어 있지만 여러 문을 지원합니다. DBD :: mysql 문서의 Class Methods 섹션 아래에있는 mysql_multi_statements
을 참조하십시오.
그러나 두 가지 문제를 동시에 해결하고 더 이식성이 뛰어난 훨씬 더 나은 솔루션은 준비된 문과 자리 표시 자 값을 사용하는 것입니다.
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
당신은 한 번만 문을 준비해야하고, 자리 값이 대체 (제대로 인용 보장)된다하여 :
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
그리고, 어떤 종류의 루프에서 데이터를 얻을 DBD 드라이버
자리 표시 자에 대한 자세한 내용은 DBI docs을 참조하십시오.
, 하나에 두 개의 업데이트를 결합 할 이유가 없습니다를; 실제로해야 할 업데이트와 같은 예제를 줄 수 있습니까? – ysth