Đầu tiên và quan trọng nhất, bạn tuyệt đối không nên nội suy các biến trực tiếp vào chuỗi SQL của bạn. Điều đó để mở khả năng tấn công SQL injection. Ngay cả khi các biến đó không đến từ đầu vào của người dùng, nó vẫn mở khả năng các lỗi nguy hiểm có thể làm hỏng dữ liệu của bạn.
Trình điều khiển DBD MySQL hỗ trợ nhiều câu lệnh, mặc dù nó bị tắt theo mặc định là tính năng an toàn. Xem mysql_multi_statements
trong phần Class Methods trong tài liệu DBD :: mysql.
Nhưng giải pháp tốt hơn, giải quyết cả hai vấn đề cùng một lúc và dễ di chuyển hơn, là sử dụng các câu lệnh đã chuẩn bị và giá trị giữ chỗ.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Sau đó, nhận được dữ liệu của bạn trong một vòng lặp của một số loại:
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
Bạn chỉ cần chuẩn bị báo cáo kết quả một lần, và các giá trị giữ chỗ được thay thế (và đảm bảo được trích dẫn đúng) bởi trình điều khiển DBD.
Đọc thêm về trình giữ chỗ trong DBI docs.
trong ví dụ của bạn, không có lý do gì để không kết hợp hai bản cập nhật thành một; bạn có thể đưa ra ví dụ giống như các bản cập nhật bạn thực sự cần phải làm không? – ysth