v2.5.2
Giriş yap

php de update işleminde giriş alanıyla veritabanı kaydı deişik mi

kartal
176 defa görüntülendi

update yaparken diyelimki kullanıcı adı güncellenecek

    $name 'Ali'; // veritabanı kaydı
    $last_name 'Meli'; // veritabanı kaydı
    $user_id = 1;
    
    $updateName = 'Ali'; // input giriş
    $lastName = 'Veli'; // input giriş
    
    $updateInfos[] = '';
    $updateStr = '';
    if($name != $updateName){ // GEREK VAR MI ?
        
        $updateName // değişmiş güncelle
        $updateInfos['name'] = $updateName;
        $updateStr .= "name = :name , ";
    }
    
     if($lastName != $last_name){ // GEREK VAR MI ?
        
        $updateName // değişmiş güncelle
        $updateInfos['$last_name'] = $updateName;
        $updateStr .= "$last_name = :$last_name , ";
    }
    
    $updateStr = r_trim($updateStr,' , ');
    
    $upSql = "UPDATE user_info SET $updateStr WHERE user_id = :user_id";
    $up->prepare($upSql);
    
    // Burada işler karmaşıklaşıyor
    foreach($updateInfos as $column => $val){
        $up->bindParam(":$column",$upVal,PDO::PARAM_INT);
        $up->bindParam(":user_id",$user_id,PDO::PARAM_INT);
        $up->execute();
    }
    
    /*
        SONUÇ :
         Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in
         name alanları birbiriyle görüldüğü gibi tutmuyor
         eğer user_id sorgudan çıkarırsam bütün satırları güncelliyor.
        
    */
    
    // burada ikisi aynı mı diye kontrol etmeye gerek varmı
    // php bu durumda biraz araştırdım güncelleme işlemini yapmıyormuş
    // basit 1-2 girişlik güncellemelerde sorun yok ama formda çok sayıda veri olursa problem oluyor
    // çünkü sadece değişiklik olanları alırsak eğer
    
    /*
        sorguları dinamik olarak hazırlama karmaşası oluyor
        
        Bunun yerine girişlerde değişiklik yokmu diye kontrol etmektense bütün girişleri sorguya gönderip klasik bir sorgu mu yazmalıyım
        
        
    */
    $upSql = "UPDATE user SET user_name = :user_name , last_name = :last_name WHERE user_id = :user_id";
    $op->prepare($upSql);
    $up->bindParam(":user_name",$updateName,PDO::PARAM_STR);
    $up->bindParam(":last_name",$lastName,PDO::PARAM_STR);
    $up->bindParam(":user_id",$user_id,PDO::PARAM_INT);
    $up->execute();
    
    Sonuçta mysql sadece değişen yerleri güncellemeyecek mi
    
Cevap yaz
Cevaplar (0)
Henüz kimse cevap yazmadı. İlk cevap yazan sen ol!