$menuAdlari = array();
$dilsor = $db->query("SELECT * FROM dil");
$dilcek = $dilsor->fetchAll(PDO::FETCH_ASSOC);
foreach ($dilcek as $dil) {
    $dilKisa = $dil['dil_kisa'];
    $menuAdiDil = $_POST['menuad' . $dilKisa];
    $menudil = $_POST['menudil' . $dilKisa];
    $menuSlug = seo($menuAdiDil);
    $menuAdlari[] = array(
        'menuAdiDil' => $menuAdiDil,
        'menuSlug' => $menuSlug,
        'menudil'  => $menudil
    );
}
 
foreach ($menuAdlari as $menuAdi) {
    $stmt = $db->prepare("INSERT INTO menu (idrand, menuust, menusabit, menuad, menuslug, menuurl, menusira, menudil, menubanner, menusite, menupanel, menupanelmenu) 
    VALUES (:idrand, :menuust, :menusabit, :menuad, :menuslug, :menuurl, :menusira, :menudil, :menubanner, :menusite, :menupanel, :menupanelmenu)
    ON DUPLICATE KEY UPDATE menudil = :menudil
    ");

    $stmt->bindValue(':idrand', $_POST['idrand'], PDO::PARAM_STR);
    $stmt->bindValue(':menuust', (isset($_POST['menuust']) ? $_POST['menuust'] : 0), PDO::PARAM_STR);
    $stmt->bindValue(':menusabit', $_POST['menusabit'], PDO::PARAM_STR);
    $stmt->bindValue(':menubanner', $menubanner, PDO::PARAM_STR); //menubanner degiskeninin tanimlamasi eksik 
    $stmt->bindValue(':menuurl',  $_POST['menuurl'], PDO::PARAM_STR);
    $stmt->bindValue(':menusira', $_POST['menusira'], PDO::PARAM_INT);
    $stmt->bindValue(':menusite', $_POST['menusite'], PDO::PARAM_INT);
    $stmt->bindValue(':menupanel', $_POST['menupanel'], PDO::PARAM_INT);
    $stmt->bindValue(':menupanelmenu', $_POST['menupanelmenu'], PDO::PARAM_INT);
    $stmt->bindValue(':menuad', $menuAdi['menuAdiDil'], PDO::PARAM_STR);
    $stmt->bindValue(':menuslug', $menuAdi['menuSlug'], PDO::PARAM_STR);
    $stmt->bindValue(':menudil', $menuAdi['menudil'], PDO::PARAM_STR);
    
    $stmt->execute();
}
doğru kod sıralaması yukarıdaki şekilde, guncellenmesi gereken veriler sizin tercihinize kalmıştır,

daha öncede yazmıştım, dökümantasyon linkini de vermiştim. bu yazacaklarımın hepsi aslında o dökümantasyonda da yazıyor. size neyin nasıl yapılacağını dökümantasyonlar verir. dökümantasyonu okuyup çözemiyorsanız, o durumla ilgili daha başka veya geride kalan bir problemler vardır. neyse biraz daha on duplicate key update olayını açıklmaya çalışayım.
on duplicate update in çalışması için en az bir tane uniq indexi olan sutun(column) olmak zorunda, (kullanım amacına göre birden fazla sutunda aynı uniq indexe baglanabilir )
uniq sutun demek veri degeri tablo icinde sadece bir kere olabilir, benzersiz demektir.
çok basit bir çalışma mantığı vardır; uniq veri tekrarlanamaz kuralından yola çıkarak çalışır. tablonuzda hangi veriler ne şekilde olur bilmiyorum, kullandığım veri değerleri sadece örnektir.
örneğin tablodaki bir sırada(row) idrank degeri 5 ise baska bir siradaki(row) idrank degeri 5 olamaz. daha once idrank 5 olan veri tabloda bulunduğu için tekrar idrank 5 eklenemez ve uniq olmayan baska sutunlarda degerleri yukarıdaki sekilde guncelleyebilirsiniz.

kolaylıklar dilerim