php de update işleminde giriş alanıyla veritabanı kaydı deişik mi
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
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (0)
Henüz kimse cevap yazmadı. İlk cevap yazan sen ol!