Đầu tiên, thứ tự đánh giá của bạn là sai. Bạn không nên đặt một biến có giá trị POST TRƯỚC KHI kiểm tra xem giá trị POST có tồn tại hay không. Bạn nên kiểm tra sự tồn tại của nó sau đó đặt nó thành một biến chỉ khi nó tồn tại.
$id = $conn->lastInsertId(); // obtained from above (*)
if (!isset($_POST['services'])) {
echo 'Nothing Selected';
} else {
$services = $_POST['services']; // array(0 => 1, 1 => 2, ...)
Thứ hai, tôi cho rằng bạn đã có kết nối từ trước (*) - vì vậy không cần phải kết nối lại. Vì truy vấn của bạn ngắn, bạn có thể sử dụng ?
để ràng buộc các tham số của bạn như được hiển thị trong Ví dụ # 3
.
try {
$stmt = $conn->prepare('INSERT IGNORE INTO marketing_lookup SET domain_id = ?, service_id = ?');
foreach ($services as $serviceId) {
$stmt->execute(array($id, $serviceId));
}
} catch (PDOException $e) {
echo $e->getMessage();
}
}
$conn = null; // pointless
Bạn có thể muốn xem xét giao dịch vì bạn đang thực hiện nhiều lần chèn.